{"version":3,"file":"cordova-auth0-plugin.min.js","sources":["../src/version.js","../src/helper/assert.js","../src/helper/object-assign.js","../src/helper/object.js","../src/helper/window.js","../node_modules/url-join/lib/url-join.js","../node_modules/qs/lib/utils.js","../node_modules/qs/lib/formats.js","../node_modules/qs/lib/stringify.js","../node_modules/qs/lib/parse.js","../plugins/cordova/popup-handler.js","../plugins/cordova/plugin-handler.js","../plugins/cordova/index.js"],"sourcesContent":["module.exports = { raw: '9.12.2' };\n","var toString = Object.prototype.toString;\n\nfunction attribute(o, attr, type, text) {\n type = type === 'array' ? 'object' : type;\n if (o && typeof o[attr] !== type) {\n throw new Error(text);\n }\n}\n\nfunction variable(o, type, text) {\n if (typeof o !== type) {\n throw new Error(text);\n }\n}\n\nfunction value(o, values, text) {\n if (values.indexOf(o) === -1) {\n throw new Error(text);\n }\n}\n\nfunction check(o, config, attributes) {\n if (!config.optional || o) {\n variable(o, config.type, config.message);\n }\n if (config.type === 'object' && attributes) {\n var keys = Object.keys(attributes);\n\n for (var index = 0; index < keys.length; index++) {\n var a = keys[index];\n if (!attributes[a].optional || o[a]) {\n if (!attributes[a].condition || attributes[a].condition(o)) {\n attribute(o, a, attributes[a].type, attributes[a].message);\n if (attributes[a].values) {\n value(o[a], attributes[a].values, attributes[a].value_message);\n }\n }\n }\n }\n }\n}\n\n/**\n * Wrap `Array.isArray` Polyfill for IE9\n * source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n *\n * @param {Array} array\n * @private\n */\nfunction isArray(array) {\n if (this.supportsIsArray()) {\n return Array.isArray(array);\n }\n\n return toString.call(array) === '[object Array]';\n}\n\nfunction supportsIsArray() {\n return Array.isArray != null;\n}\n\nexport default {\n check: check,\n attribute: attribute,\n variable: variable,\n value: value,\n isArray: isArray,\n supportsIsArray: supportsIsArray\n};\n","/* eslint-disable no-continue */\n\nfunction get() {\n if (!Object.assign) {\n return objectAssignPolyfill;\n }\n\n return Object.assign;\n}\n\nfunction objectAssignPolyfill(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n\n var keysArray = Object.keys(Object(nextSource));\n for (\n var nextIndex = 0, len = keysArray.length;\n nextIndex < len;\n nextIndex++\n ) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n}\n\nexport default {\n get: get,\n objectAssignPolyfill: objectAssignPolyfill\n};\n","/* eslint-disable no-param-reassign */\n/* eslint-disable no-restricted-syntax */\n/* eslint-disable guard-for-in */\n\nimport assert from './assert';\nimport objectAssign from './object-assign';\n\nfunction pick(object, keys) {\n return keys.reduce(function(prev, key) {\n if (object[key]) {\n prev[key] = object[key];\n }\n return prev;\n }, {});\n}\n\nfunction getKeysNotIn(obj, allowedKeys) {\n var notAllowed = [];\n for (var key in obj) {\n if (allowedKeys.indexOf(key) === -1) {\n notAllowed.push(key);\n }\n }\n return notAllowed;\n}\n\nfunction objectValues(obj) {\n var values = [];\n for (var key in obj) {\n values.push(obj[key]);\n }\n return values;\n}\n\nfunction extend() {\n var params = objectValues(arguments);\n params.unshift({});\n return objectAssign.get().apply(undefined, params);\n}\n\nfunction merge(object, keys) {\n return {\n base: keys ? pick(object, keys) : object,\n with: function(object2, keys2) {\n object2 = keys2 ? pick(object2, keys2) : object2;\n return extend(this.base, object2);\n }\n };\n}\n\nfunction blacklist(object, blacklistedKeys) {\n return Object.keys(object).reduce(function(p, key) {\n if (blacklistedKeys.indexOf(key) === -1) {\n p[key] = object[key];\n }\n return p;\n }, {});\n}\n\nfunction camelToSnake(str) {\n var newKey = '';\n var index = 0;\n var code;\n var wasPrevNumber = true;\n var wasPrevUppercase = true;\n\n while (index < str.length) {\n code = str.charCodeAt(index);\n if (\n (!wasPrevUppercase && code >= 65 && code <= 90) ||\n (!wasPrevNumber && code >= 48 && code <= 57)\n ) {\n newKey += '_';\n newKey += str[index].toLowerCase();\n } else {\n newKey += str[index].toLowerCase();\n }\n wasPrevNumber = code >= 48 && code <= 57;\n wasPrevUppercase = code >= 65 && code <= 90;\n index++;\n }\n\n return newKey;\n}\n\nfunction snakeToCamel(str) {\n var parts = str.split('_');\n return parts.reduce(function(p, c) {\n return p + c.charAt(0).toUpperCase() + c.slice(1);\n }, parts.shift());\n}\n\nfunction toSnakeCase(object, exceptions) {\n if (typeof object !== 'object' || assert.isArray(object) || object === null) {\n return object;\n }\n exceptions = exceptions || [];\n\n return Object.keys(object).reduce(function(p, key) {\n var newKey = exceptions.indexOf(key) === -1 ? camelToSnake(key) : key;\n p[newKey] = toSnakeCase(object[key]);\n return p;\n }, {});\n}\n\nfunction toCamelCase(object, exceptions, options) {\n if (typeof object !== 'object' || assert.isArray(object) || object === null) {\n return object;\n }\n\n exceptions = exceptions || [];\n options = options || {};\n return Object.keys(object).reduce(function(p, key) {\n var newKey = exceptions.indexOf(key) === -1 ? snakeToCamel(key) : key;\n\n p[newKey] = toCamelCase(object[newKey] || object[key], [], options);\n\n if (options.keepOriginal) {\n p[key] = toCamelCase(object[key], [], options);\n }\n return p;\n }, {});\n}\n\nfunction getLocationFromUrl(href) {\n var match = href.match(\n /^(https?:|file:|chrome-extension:)\\/\\/(([^:/?#]*)(?::([0-9]+))?)([/]{0,1}[^?#]*)(\\?[^#]*|)(#.*|)$/\n );\n return (\n match && {\n href: href,\n protocol: match[1],\n host: match[2],\n hostname: match[3],\n port: match[4],\n pathname: match[5],\n search: match[6],\n hash: match[7]\n }\n );\n}\n\nfunction getOriginFromUrl(url) {\n if (!url) {\n return undefined;\n }\n var parsed = getLocationFromUrl(url);\n var origin = parsed.protocol + '//' + parsed.hostname;\n if (parsed.port) {\n origin += ':' + parsed.port;\n }\n return origin;\n}\n\nfunction trim(options, key) {\n var trimmed = extend(options);\n if (options[key]) {\n trimmed[key] = options[key].trim();\n }\n return trimmed;\n}\n\nfunction trimMultiple(options, keys) {\n return keys.reduce(trim, options);\n}\n\nfunction trimUserDetails(options) {\n return trimMultiple(options, ['username', 'email', 'phoneNumber']);\n}\n\nexport default {\n toSnakeCase: toSnakeCase,\n toCamelCase: toCamelCase,\n blacklist: blacklist,\n merge: merge,\n pick: pick,\n getKeysNotIn: getKeysNotIn,\n extend: extend,\n getOriginFromUrl: getOriginFromUrl,\n getLocationFromUrl: getLocationFromUrl,\n trimUserDetails: trimUserDetails\n};\n","import objectHelper from './object';\n\nfunction redirect(url) {\n getWindow().location = url;\n}\n\nfunction getDocument() {\n return getWindow().document;\n}\n\nfunction getWindow() {\n return window;\n}\n\nfunction getOrigin() {\n var location = getWindow().location;\n var origin = location.origin;\n\n if (!origin) {\n origin = objectHelper.getOriginFromUrl(location.href);\n }\n\n return origin;\n}\n\nexport default {\n redirect: redirect,\n getDocument: getDocument,\n getWindow: getWindow,\n getOrigin: getOrigin\n};\n","(function (name, context, definition) {\n if (typeof module !== 'undefined' && module.exports) module.exports = definition();\n else if (typeof define === 'function' && define.amd) define(definition);\n else context[name] = definition();\n})('urljoin', this, function () {\n\n function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n }\n\n return function () {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n };\n\n});\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar encode = function encode(str, defaultEncoder, charset) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n ) {\n out += string.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n merge: merge\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar util = require('./utils');\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = util.assign(\n {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n }\n },\n Format\n);\n","'use strict';\n\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) { // eslint-disable-line func-name-matching\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) { // eslint-disable-line func-name-matching\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) { // eslint-disable-line func-name-matching\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) { // eslint-disable-line func-name-matching\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint'; // eslint-disable-line valid-typeof\n};\n\nvar stringify = function stringify( // eslint-disable-line func-name-matching\n object,\n prefix,\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n formatter,\n encodeValuesOnly,\n charset\n) {\n var obj = object;\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = obj.join(',');\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (skipNulls && obj[key] === null) {\n continue;\n }\n\n if (isArray(obj)) {\n pushToArray(values, stringify(\n obj[key],\n typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix,\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n formatter,\n encodeValuesOnly,\n charset\n ));\n } else {\n pushToArray(values, stringify(\n obj[key],\n prefix + (allowDots ? '.' + key : '[' + key + ']'),\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n formatter,\n encodeValuesOnly,\n charset\n ));\n }\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var arrayFormat;\n if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if (opts && 'indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = 'indices';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(\n obj[key],\n key,\n generateArrayPrefix,\n options.strictNullHandling,\n options.skipNulls,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.formatter,\n options.encodeValuesOnly,\n options.charset\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = {};\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key, val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset);\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset);\n val = options.decoder(part.slice(pos + 1), defaults.decoder, charset);\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(val);\n }\n\n if (val && options.comma && val.indexOf(',') > -1) {\n val = val.split(',');\n }\n\n if (has.call(obj, key)) {\n obj[key] = utils.combine(obj[key], val);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options) {\n var leaf = val;\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n obj = [].concat(leaf);\n } else {\n obj = options.plainObjects ? Object.create(null) : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var index = parseInt(cleanRoot, 10);\n if (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n } else if (\n !isNaN(index)\n && root !== cleanRoot\n && String(index) === cleanRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)\n ) {\n obj = [];\n obj[index] = leaf;\n } else {\n obj[cleanRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options) {\n if (!givenKey) {\n return;\n }\n\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n // The regex chunks\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n // Get the parent\n\n var segment = options.depth > 0 && brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n // Stash the parent if it exists\n\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys.push(parent);\n }\n\n // Loop through children appending to the array until we hit depth\n\n var i = 0;\n while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n\n // If there's a remainder, just add whatever is left\n\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']');\n }\n\n return parseObject(keys, val, options);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new Error('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n return {\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? Object.create(null) : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options);\n obj = utils.merge(obj, newObj, options);\n }\n\n return utils.compact(obj);\n};\n","import windowHandler from '../../src/helper/window';\nimport qs from 'qs';\nimport urljoin from 'url-join';\n\nfunction PopupHandler(webAuth) {\n this.webAuth = webAuth;\n this._current_popup = null;\n this.options = null;\n}\n\nPopupHandler.prototype.preload = function(options) {\n var _this = this;\n var _window = windowHandler.getWindow();\n\n var url = options.url || 'about:blank';\n var popupOptions = options.popupOptions || {};\n\n popupOptions.location = 'yes';\n delete popupOptions.width;\n delete popupOptions.height;\n\n var windowFeatures = qs.stringify(popupOptions, {\n encode: false,\n delimiter: ','\n });\n\n if (this._current_popup && !this._current_popup.closed) {\n return this._current_popup;\n }\n\n this._current_popup = _window.open(url, '_blank', windowFeatures);\n\n this._current_popup.kill = function(success) {\n _this._current_popup.success = success;\n this.close();\n _this._current_popup = null;\n };\n\n return this._current_popup;\n};\n\nPopupHandler.prototype.load = function(url, _, options, cb) {\n var _this = this;\n this.url = url;\n this.options = options;\n if (!this._current_popup) {\n options.url = url;\n this.preload(options);\n } else {\n this._current_popup.location.href = url;\n }\n\n this.transientErrorHandler = function(event) {\n _this.errorHandler(event, cb);\n };\n\n this.transientStartHandler = function(event) {\n _this.startHandler(event, cb);\n };\n\n this.transientExitHandler = function() {\n _this.exitHandler(cb);\n };\n\n this._current_popup.addEventListener('loaderror', this.transientErrorHandler);\n this._current_popup.addEventListener('loadstart', this.transientStartHandler);\n this._current_popup.addEventListener('exit', this.transientExitHandler);\n};\n\nPopupHandler.prototype.errorHandler = function(event, cb) {\n if (!this._current_popup) {\n return;\n }\n\n this._current_popup.kill(true);\n\n cb({ error: 'window_error', errorDescription: event.message });\n};\n\nPopupHandler.prototype.unhook = function() {\n this._current_popup.removeEventListener(\n 'loaderror',\n this.transientErrorHandler\n );\n this._current_popup.removeEventListener(\n 'loadstart',\n this.transientStartHandler\n );\n this._current_popup.removeEventListener('exit', this.transientExitHandler);\n};\n\nPopupHandler.prototype.exitHandler = function(cb) {\n if (!this._current_popup) {\n return;\n }\n\n // when the modal is closed, this event is called which ends up removing the\n // event listeners. If you move this before closing the modal, it will add ~1 sec\n // delay between the user being redirected to the callback and the popup gets closed.\n this.unhook();\n\n if (!this._current_popup.success) {\n cb({ error: 'window_closed', errorDescription: 'Browser window closed' });\n }\n};\n\nPopupHandler.prototype.startHandler = function(event, cb) {\n var _this = this;\n\n if (!this._current_popup) {\n return;\n }\n\n var callbackUrl = urljoin(\n 'https:',\n this.webAuth.baseOptions.domain,\n '/mobile'\n );\n\n if (event.url && !(event.url.indexOf(callbackUrl + '#') === 0)) {\n return;\n }\n\n var parts = event.url.split('#');\n\n if (parts.length === 1) {\n return;\n }\n\n var opts = { hash: parts.pop() };\n\n if (this.options.nonce) {\n opts.nonce = this.options.nonce;\n }\n\n this.webAuth.parseHash(opts, function(error, result) {\n if (error || result) {\n _this._current_popup.kill(true);\n cb(error, result);\n }\n });\n};\n\nexport default PopupHandler;\n","import urljoin from 'url-join';\nimport PopupHandler from './popup-handler';\n\nfunction PluginHandler(webAuth) {\n this.webAuth = webAuth;\n}\n\nPluginHandler.prototype.processParams = function(params) {\n params.redirectUri = urljoin('https://' + params.domain, 'mobile');\n delete params.owp;\n return params;\n};\n\nPluginHandler.prototype.getPopupHandler = function() {\n return new PopupHandler(this.webAuth);\n};\n\nexport default PluginHandler;\n","import version from '../../src/version';\nimport windowHandler from '../../src/helper/window';\nimport PluginHandler from './plugin-handler';\n\nfunction CordovaPlugin() {\n this.webAuth = null;\n this.version = version.raw;\n this.extensibilityPoints = ['popup.authorize', 'popup.getPopupHandler'];\n}\n\nCordovaPlugin.prototype.setWebAuth = function(webAuth) {\n this.webAuth = webAuth;\n};\n\nCordovaPlugin.prototype.supports = function(extensibilityPoint) {\n var _window = windowHandler.getWindow();\n return (\n (!!_window.cordova || !!_window.electron) &&\n this.extensibilityPoints.indexOf(extensibilityPoint) > -1\n );\n};\n\nCordovaPlugin.prototype.init = function() {\n return new PluginHandler(this.webAuth);\n};\n\nexport default CordovaPlugin;\n"],"names":["raw","toString","Object","prototype","attribute","o","attr","type","text","Error","variable","value","values","indexOf","check","config","attributes","optional","message","keys","index","length","a","condition","value_message","isArray","array","this","supportsIsArray","Array","call","objectAssignPolyfill","target","TypeError","to","i","arguments","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","undefined","enumerable","get","assign","pick","object","reduce","prev","key","extend","params","obj","push","objectValues","unshift","objectAssign","apply","getLocationFromUrl","href","match","protocol","host","hostname","port","pathname","search","hash","trim","options","trimmed","toSnakeCase","exceptions","assert","p","str","code","newKey","wasPrevNumber","wasPrevUppercase","charCodeAt","toLowerCase","camelToSnake","toCamelCase","parts","split","c","charAt","toUpperCase","slice","shift","keepOriginal","blacklist","blacklistedKeys","merge","base","with","object2","keys2","getKeysNotIn","allowedKeys","notAllowed","getOriginFromUrl","url","parsed","origin","trimUserDetails","trimMultiple","getWindow","window","redirect","location","getDocument","document","getOrigin","objectHelper","context","definition","normalize","strArray","resultArray","first","replace","component","join","module","exports","has","hasOwnProperty","hexTable","arrayToObject","source","plainObjects","create","acc","combine","b","concat","compact","queue","prop","refs","item","j","val","pop","compacted","compactQueue","decode","decoder","charset","strWithoutPlus","unescape","decodeURIComponent","e","encode","defaultEncoder","string","Symbol","String","escape","$0","parseInt","out","isBuffer","constructor","isRegExp","allowPrototypes","mergeTarget","forEach","targetItem","percentTwenties","Format","RFC1738","RFC3986","util","default","formatters","arrayPrefixGenerators","brackets","prefix","comma","indices","repeat","pushToArray","arr","valueOrArray","toISO","Date","toISOString","defaultFormat","formats","defaults","addQueryPrefix","allowDots","charsetSentinel","delimiter","encoder","utils","encodeValuesOnly","format","formatter","serializeDate","date","skipNulls","strictNullHandling","stringify","generateArrayPrefix","filter","sort","v","objKeys","opts","normalizeStringifyOptions","arrayFormat","joined","PopupHandler","webAuth","_current_popup","PluginHandler","CordovaPlugin","version","extensibilityPoints","preload","_this","_window","windowHandler","popupOptions","width","height","windowFeatures","qs","closed","open","kill","success","close","load","_","cb","transientErrorHandler","event","errorHandler","transientStartHandler","startHandler","transientExitHandler","exitHandler","addEventListener","error","errorDescription","unhook","removeEventListener","callbackUrl","urljoin","baseOptions","domain","nonce","parseHash","result","processParams","redirectUri","owp","getPopupHandler","setWebAuth","supports","extensibilityPoint","cordova","electron","init"],"mappings":"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"}