From 0f8c6e147b384b437e7bc4093577a305026fb936 Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Sun, 18 Mar 2018 00:21:23 +1100 Subject: [PATCH] Added Sentry --- demo/dist/demo.js | 4136 +++++++++++++++++++++++++++++++++-- demo/dist/demo.js.map | 2 +- demo/dist/demo.min.js | 2 +- demo/dist/demo.min.js.map | 2 +- demo/index.html | 2 +- demo/src/js/demo.js | 396 ++-- dist/plyr.js | 4 +- dist/plyr.js.map | 2 +- dist/plyr.min.js | 2 +- dist/plyr.min.js.map | 2 +- dist/plyr.polyfilled.js | 2 +- dist/plyr.polyfilled.js.map | 2 +- package.json | 5 +- readme.md | 2 +- yarn.lock | 4 + 15 files changed, 4174 insertions(+), 391 deletions(-) diff --git a/demo/dist/demo.js b/demo/dist/demo.js index 674ba895..d41a736b 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -1,220 +1,3986 @@ (function () { 'use strict'; +var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + + + + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var stringify_1 = createCommonjsModule(function (module, exports) { +/* + json-stringify-safe + Like JSON.stringify, but doesn't throw on circular references. + + Originally forked from https://github.com/isaacs/json-stringify-safe + version 5.0.1 on 3/8/2017 and modified to handle Errors serialization + and IE8 compatibility. Tests for this are in test/vendor. + + ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE +*/ + +exports = module.exports = stringify; +exports.getSerialize = serializer; + +function indexOf(haystack, needle) { + for (var i = 0; i < haystack.length; ++i) { + if (haystack[i] === needle) return i; + } + return -1; +} + +function stringify(obj, replacer, spaces, cycleReplacer) { + return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces); +} + +// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106 +function stringifyError(value) { + var err = { + // These properties are implemented as magical getters and don't show up in for in + stack: value.stack, + message: value.message, + name: value.name + }; + + for (var i in value) { + if (Object.prototype.hasOwnProperty.call(value, i)) { + err[i] = value[i]; + } + } + + return err; +} + +function serializer(replacer, cycleReplacer) { + var stack = []; + var keys = []; + + if (cycleReplacer == null) { + cycleReplacer = function(key, value) { + if (stack[0] === value) { + return '[Circular ~]'; + } + return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']'; + }; + } + + return function(key, value) { + if (stack.length > 0) { + var thisPos = indexOf(stack, this); + ~thisPos ? stack.splice(thisPos + 1) : stack.push(this); + ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key); + + if (~indexOf(stack, value)) { + value = cycleReplacer.call(this, key, value); + } + } else { + stack.push(value); + } + + return replacer == null + ? value instanceof Error ? stringifyError(value) : value + : replacer.call(this, key, value); + }; +} +}); + +var _window$3 = + typeof window !== 'undefined' + ? window + : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof self !== 'undefined' ? self : {}; + +function isObject$1(what) { + return typeof what === 'object' && what !== null; +} + +// Yanked from https://git.io/vS8DV re-used under CC0 +// with some tiny modifications +function isError$1(value) { + switch ({}.toString.call(value)) { + case '[object Error]': + return true; + case '[object Exception]': + return true; + case '[object DOMException]': + return true; + default: + return value instanceof Error; + } +} + +function isErrorEvent$1(value) { + return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]'; +} + +function isUndefined$1(what) { + return what === void 0; +} + +function isFunction$1(what) { + return typeof what === 'function'; +} + +function isPlainObject$1(what) { + return Object.prototype.toString.call(what) === '[object Object]'; +} + +function isString$1(what) { + return Object.prototype.toString.call(what) === '[object String]'; +} + +function isArray$1(what) { + return Object.prototype.toString.call(what) === '[object Array]'; +} + +function isEmptyObject$1(what) { + if (!isPlainObject$1(what)) return false; + + for (var _ in what) { + if (what.hasOwnProperty(_)) { + return false; + } + } + return true; +} + +function supportsErrorEvent() { + try { + new ErrorEvent(''); // eslint-disable-line no-new + return true; + } catch (e) { + return false; + } +} + +function supportsFetch$1() { + if (!('fetch' in _window$3)) return false; + + try { + new Headers(); // eslint-disable-line no-new + new Request(''); // eslint-disable-line no-new + new Response(); // eslint-disable-line no-new + return true; + } catch (e) { + return false; + } +} + +// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default +// https://caniuse.com/#feat=referrer-policy +// It doesn't. And it throw exception instead of ignoring this parameter... +// REF: https://github.com/getsentry/raven-js/issues/1233 +function supportsReferrerPolicy$1() { + if (!supportsFetch$1()) return false; + + try { + // eslint-disable-next-line no-new + new Request('pickleRick', { + referrerPolicy: 'origin' + }); + return true; + } catch (e) { + return false; + } +} + +function supportsPromiseRejectionEvent() { + return typeof PromiseRejectionEvent === 'function'; +} + +function wrappedCallback(callback) { + function dataCallback(data, original) { + var normalizedData = callback(data) || data; + if (original) { + return original(normalizedData) || normalizedData; + } + return normalizedData; + } + + return dataCallback; +} + +function each$1(obj, callback) { + var i, j; + + if (isUndefined$1(obj.length)) { + for (i in obj) { + if (hasKey$1(obj, i)) { + callback.call(null, i, obj[i]); + } + } + } else { + j = obj.length; + if (j) { + for (i = 0; i < j; i++) { + callback.call(null, i, obj[i]); + } + } + } +} + +function objectMerge$1(obj1, obj2) { + if (!obj2) { + return obj1; + } + each$1(obj2, function(key, value) { + obj1[key] = value; + }); + return obj1; +} + +/** + * This function is only used for react-native. + * react-native freezes object that have already been sent over the + * js bridge. We need this function in order to check if the object is frozen. + * So it's ok that objectFrozen returns false if Object.isFrozen is not + * supported because it's not relevant for other "platforms". See related issue: + * https://github.com/getsentry/react-native-sentry/issues/57 + */ +function objectFrozen$1(obj) { + if (!Object.isFrozen) { + return false; + } + return Object.isFrozen(obj); +} + +function truncate$1(str, max) { + return !max || str.length <= max ? str : str.substr(0, max) + '\u2026'; +} + +/** + * hasKey, a better form of hasOwnProperty + * Example: hasKey(MainHostObject, property) === true/false + * + * @param {Object} host object to check property + * @param {string} key to check + */ +function hasKey$1(object, key) { + return Object.prototype.hasOwnProperty.call(object, key); +} + +function joinRegExp$1(patterns) { + // Combine an array of regular expressions and strings into one large regexp + // Be mad. + var sources = [], + i = 0, + len = patterns.length, + pattern; + + for (; i < len; i++) { + pattern = patterns[i]; + if (isString$1(pattern)) { + // If it's a string, we need to escape it + // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1')); + } else if (pattern && pattern.source) { + // If it's a regexp already, we want to extract the source + sources.push(pattern.source); + } + // Intentionally skip other cases + } + return new RegExp(sources.join('|'), 'i'); +} + +function urlencode$1(o) { + var pairs = []; + each$1(o, function(key, value) { + pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); + }); + return pairs.join('&'); +} + +// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B +// intentionally using regex and not href parsing trick because React Native and other +// environments where DOM might not be available +function parseUrl$1(url) { + if (typeof url !== 'string') return {}; + var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); + + // coerce to undefined values to empty string so we don't get 'undefined' + var query = match[6] || ''; + var fragment = match[8] || ''; + return { + protocol: match[2], + host: match[4], + path: match[5], + relative: match[5] + query + fragment // everything minus origin + }; +} +function uuid4$1() { + var crypto = _window$3.crypto || _window$3.msCrypto; + + if (!isUndefined$1(crypto) && crypto.getRandomValues) { + // Use window.crypto API if available + // eslint-disable-next-line no-undef + var arr = new Uint16Array(8); + crypto.getRandomValues(arr); + + // set 4 in byte 7 + arr[3] = (arr[3] & 0xfff) | 0x4000; + // set 2 most significant bits of byte 9 to '10' + arr[4] = (arr[4] & 0x3fff) | 0x8000; + + var pad = function(num) { + var v = num.toString(16); + while (v.length < 4) { + v = '0' + v; + } + return v; + }; + + return ( + pad(arr[0]) + + pad(arr[1]) + + pad(arr[2]) + + pad(arr[3]) + + pad(arr[4]) + + pad(arr[5]) + + pad(arr[6]) + + pad(arr[7]) + ); + } else { + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 + return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (Math.random() * 16) | 0, + v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); + } +} + +/** + * Given a child DOM element, returns a query-selector statement describing that + * and its ancestors + * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz] + * @param elem + * @returns {string} + */ +function htmlTreeAsString$1(elem) { + /* eslint no-extra-parens:0*/ + var MAX_TRAVERSE_HEIGHT = 5, + MAX_OUTPUT_LEN = 80, + out = [], + height = 0, + len = 0, + separator = ' > ', + sepLength = separator.length, + nextStr; + + while (elem && height++ < MAX_TRAVERSE_HEIGHT) { + nextStr = htmlElementAsString(elem); + // bail out if + // - nextStr is the 'html' element + // - the length of the string that would be created exceeds MAX_OUTPUT_LEN + // (ignore this limit if we are on the first iteration) + if ( + nextStr === 'html' || + (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) + ) { + break; + } + + out.push(nextStr); + + len += nextStr.length; + elem = elem.parentNode; + } + + return out.reverse().join(separator); +} + +/** + * Returns a simple, query-selector representation of a DOM element + * e.g. [HTMLElement] => input#foo.btn[name=baz] + * @param HTMLElement + * @returns {string} + */ +function htmlElementAsString(elem) { + var out = [], + className, + classes, + key, + attr, + i; + + if (!elem || !elem.tagName) { + return ''; + } + + out.push(elem.tagName.toLowerCase()); + if (elem.id) { + out.push('#' + elem.id); + } + + className = elem.className; + if (className && isString$1(className)) { + classes = className.split(/\s+/); + for (i = 0; i < classes.length; i++) { + out.push('.' + classes[i]); + } + } + var attrWhitelist = ['type', 'name', 'title', 'alt']; + for (i = 0; i < attrWhitelist.length; i++) { + key = attrWhitelist[i]; + attr = elem.getAttribute(key); + if (attr) { + out.push('[' + key + '="' + attr + '"]'); + } + } + return out.join(''); +} + +/** + * Returns true if either a OR b is truthy, but not both + */ +function isOnlyOneTruthy(a, b) { + return !!(!!a ^ !!b); +} + +/** + * Returns true if both parameters are undefined + */ +function isBothUndefined(a, b) { + return isUndefined$1(a) && isUndefined$1(b); +} + +/** + * Returns true if the two input exception interfaces have the same content + */ +function isSameException$1(ex1, ex2) { + if (isOnlyOneTruthy(ex1, ex2)) return false; + + ex1 = ex1.values[0]; + ex2 = ex2.values[0]; + + if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false; + + // in case both stacktraces are undefined, we can't decide so default to false + if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false; + + return isSameStacktrace$1(ex1.stacktrace, ex2.stacktrace); +} + +/** + * Returns true if the two input stack trace interfaces have the same content + */ +function isSameStacktrace$1(stack1, stack2) { + if (isOnlyOneTruthy(stack1, stack2)) return false; + + var frames1 = stack1.frames; + var frames2 = stack2.frames; + + // Exit early if frame count differs + if (frames1.length !== frames2.length) return false; + + // Iterate through every frame; bail out if anything differs + var a, b; + for (var i = 0; i < frames1.length; i++) { + a = frames1[i]; + b = frames2[i]; + if ( + a.filename !== b.filename || + a.lineno !== b.lineno || + a.colno !== b.colno || + a['function'] !== b['function'] + ) + return false; + } + return true; +} + +/** + * Polyfill a method + * @param obj object e.g. `document` + * @param name method name present on object e.g. `addEventListener` + * @param replacement replacement function + * @param track {optional} record instrumentation to an array + */ +function fill$1(obj, name, replacement, track) { + var orig = obj[name]; + obj[name] = replacement(orig); + obj[name].__raven__ = true; + obj[name].__orig__ = orig; + if (track) { + track.push([obj, name, orig]); + } +} + +/** + * Join values in array + * @param input array of values to be joined together + * @param delimiter string to be placed in-between values + * @returns {string} + */ +function safeJoin(input, delimiter) { + if (!isArray$1(input)) return ''; + + var output = []; + + for (var i = 0; i < input.length; i++) { + try { + output.push(String(input[i])); + } catch (e) { + output.push('[value cannot be serialized]'); + } + } + + return output.join(delimiter); +} + +// Default Node.js REPL depth +var MAX_SERIALIZE_EXCEPTION_DEPTH = 3; +// 50kB, as 100kB is max payload size, so half sounds reasonable +var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024; +var MAX_SERIALIZE_KEYS_LENGTH = 40; + +function utf8Length(value) { + return ~-encodeURI(value).split(/%..|./).length; +} + +function jsonSize(value) { + return utf8Length(JSON.stringify(value)); +} + +function serializeValue(value) { + var maxLength = 40; + + if (typeof value === 'string') { + return value.length <= maxLength ? value : value.substr(0, maxLength - 1) + '\u2026'; + } else if ( + typeof value === 'number' || + typeof value === 'boolean' || + typeof value === 'undefined' + ) { + return value; + } + + var type = Object.prototype.toString.call(value); + + // Node.js REPL notation + if (type === '[object Object]') return '[Object]'; + if (type === '[object Array]') return '[Array]'; + if (type === '[object Function]') + return value.name ? '[Function: ' + value.name + ']' : '[Function]'; + + return value; +} + +function serializeObject(value, depth) { + if (depth === 0) return serializeValue(value); + + if (isPlainObject$1(value)) { + return Object.keys(value).reduce(function(acc, key) { + acc[key] = serializeObject(value[key], depth - 1); + return acc; + }, {}); + } else if (Array.isArray(value)) { + return value.map(function(val) { + return serializeObject(val, depth - 1); + }); + } + + return serializeValue(value); +} + +function serializeException$1(ex, depth, maxSize) { + if (!isPlainObject$1(ex)) return ex; + + depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth; + maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize; + + var serialized = serializeObject(ex, depth); + + if (jsonSize(stringify_1(serialized)) > maxSize) { + return serializeException$1(ex, depth - 1); + } + + return serialized; +} + +function serializeKeysForMessage$1(keys, maxLength) { + if (typeof keys === 'number' || typeof keys === 'string') return keys.toString(); + if (!Array.isArray(keys)) return ''; + + keys = keys.filter(function(key) { + return typeof key === 'string'; + }); + if (keys.length === 0) return '[object has no keys]'; + + maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength; + if (keys[0].length >= maxLength) return keys[0]; + + for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) { + var serialized = keys.slice(0, usedKeys).join(', '); + if (serialized.length > maxLength) continue; + if (usedKeys === keys.length) return serialized; + return serialized + '\u2026'; + } + + return ''; +} + +var utils = { + isObject: isObject$1, + isError: isError$1, + isErrorEvent: isErrorEvent$1, + isUndefined: isUndefined$1, + isFunction: isFunction$1, + isPlainObject: isPlainObject$1, + isString: isString$1, + isArray: isArray$1, + isEmptyObject: isEmptyObject$1, + supportsErrorEvent: supportsErrorEvent, + supportsFetch: supportsFetch$1, + supportsReferrerPolicy: supportsReferrerPolicy$1, + supportsPromiseRejectionEvent: supportsPromiseRejectionEvent, + wrappedCallback: wrappedCallback, + each: each$1, + objectMerge: objectMerge$1, + truncate: truncate$1, + objectFrozen: objectFrozen$1, + hasKey: hasKey$1, + joinRegExp: joinRegExp$1, + urlencode: urlencode$1, + uuid4: uuid4$1, + htmlTreeAsString: htmlTreeAsString$1, + htmlElementAsString: htmlElementAsString, + isSameException: isSameException$1, + isSameStacktrace: isSameStacktrace$1, + parseUrl: parseUrl$1, + fill: fill$1, + safeJoin: safeJoin, + serializeException: serializeException$1, + serializeKeysForMessage: serializeKeysForMessage$1 +}; + +/* + TraceKit - Cross brower stack traces + + This was originally forked from github.com/occ/TraceKit, but has since been + largely re-written and is now maintained as part of raven-js. Tests for + this are in test/vendor. + + MIT license +*/ + +var TraceKit = { + collectWindowErrors: true, + debug: false +}; + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window$2 = + typeof window !== 'undefined' + ? window + : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof self !== 'undefined' ? self : {}; + +// global reference to slice +var _slice = [].slice; +var UNKNOWN_FUNCTION = '?'; + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types +var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/; + +function getLocationHref() { + if (typeof document === 'undefined' || document.location == null) return ''; + + return document.location.href; +} + +/** + * TraceKit.report: cross-browser processing of unhandled exceptions + * + * Syntax: + * TraceKit.report.subscribe(function(stackInfo) { ... }) + * TraceKit.report.unsubscribe(function(stackInfo) { ... }) + * TraceKit.report(exception) + * try { ...code... } catch(ex) { TraceKit.report(ex); } + * + * Supports: + * - Firefox: full stack trace with line numbers, plus column number + * on top frame; column number is not guaranteed + * - Opera: full stack trace with line and column numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * - IE: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * + * In theory, TraceKit should work on all of the following versions: + * - IE5.5+ (only 8.0 tested) + * - Firefox 0.9+ (only 3.5+ tested) + * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require + * Exceptions Have Stacktrace to be enabled in opera:config) + * - Safari 3+ (only 4+ tested) + * - Chrome 1+ (only 5+ tested) + * - Konqueror 3.5+ (untested) + * + * Requires TraceKit.computeStackTrace. + * + * Tries to catch all unhandled exceptions and report them to the + * subscribed handlers. Please note that TraceKit.report will rethrow the + * exception. This is REQUIRED in order to get a useful stack trace in IE. + * If the exception does not reach the top of the browser, you will only + * get a stack trace from the point where TraceKit.report was called. + * + * Handlers receive a stackInfo object as described in the + * TraceKit.computeStackTrace docs. + */ +TraceKit.report = (function reportModuleWrapper() { + var handlers = [], + lastArgs = null, + lastException = null, + lastExceptionStack = null; + + /** + * Add a crash handler. + * @param {Function} handler + */ + function subscribe(handler) { + installGlobalHandler(); + handlers.push(handler); + } + + /** + * Remove a crash handler. + * @param {Function} handler + */ + function unsubscribe(handler) { + for (var i = handlers.length - 1; i >= 0; --i) { + if (handlers[i] === handler) { + handlers.splice(i, 1); + } + } + } + + /** + * Remove all crash handlers. + */ + function unsubscribeAll() { + uninstallGlobalHandler(); + handlers = []; + } + + /** + * Dispatch stack information to all handlers. + * @param {Object.} stack + */ + function notifyHandlers(stack, isWindowError) { + var exception = null; + if (isWindowError && !TraceKit.collectWindowErrors) { + return; + } + for (var i in handlers) { + if (handlers.hasOwnProperty(i)) { + try { + handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2))); + } catch (inner) { + exception = inner; + } + } + } + + if (exception) { + throw exception; + } + } + + var _oldOnerrorHandler, _onErrorHandlerInstalled; + + /** + * Ensures all global unhandled exceptions are recorded. + * Supported by Gecko and IE. + * @param {string} msg Error message. + * @param {string} url URL of script that generated the exception. + * @param {(number|string)} lineNo The line number at which the error + * occurred. + * @param {?(number|string)} colNo The column number at which the error + * occurred. + * @param {?Error} ex The actual Error object. + */ + function traceKitWindowOnError(msg, url, lineNo, colNo, ex) { + var stack = null; + // If 'ex' is ErrorEvent, get real Error from inside + var exception = utils.isErrorEvent(ex) ? ex.error : ex; + // If 'msg' is ErrorEvent, get real message from inside + var message = utils.isErrorEvent(msg) ? msg.message : msg; + + if (lastExceptionStack) { + TraceKit.computeStackTrace.augmentStackTraceWithInitialElement( + lastExceptionStack, + url, + lineNo, + message + ); + processLastException(); + } else if (exception && utils.isError(exception)) { + // non-string `exception` arg; attempt to extract stack trace + + // New chrome and blink send along a real error object + // Let's just report that like a normal error. + // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror + stack = TraceKit.computeStackTrace(exception); + notifyHandlers(stack, true); + } else { + var location = { + url: url, + line: lineNo, + column: colNo + }; + + var name = undefined; + var groups; + + if ({}.toString.call(message) === '[object String]') { + var groups = message.match(ERROR_TYPES_RE); + if (groups) { + name = groups[1]; + message = groups[2]; + } + } + + location.func = UNKNOWN_FUNCTION; + + stack = { + name: name, + message: message, + url: getLocationHref(), + stack: [location] + }; + notifyHandlers(stack, true); + } + + if (_oldOnerrorHandler) { + return _oldOnerrorHandler.apply(this, arguments); + } + + return false; + } + + function installGlobalHandler() { + if (_onErrorHandlerInstalled) { + return; + } + _oldOnerrorHandler = _window$2.onerror; + _window$2.onerror = traceKitWindowOnError; + _onErrorHandlerInstalled = true; + } + + function uninstallGlobalHandler() { + if (!_onErrorHandlerInstalled) { + return; + } + _window$2.onerror = _oldOnerrorHandler; + _onErrorHandlerInstalled = false; + _oldOnerrorHandler = undefined; + } + + function processLastException() { + var _lastExceptionStack = lastExceptionStack, + _lastArgs = lastArgs; + lastArgs = null; + lastExceptionStack = null; + lastException = null; + notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs)); + } + + /** + * Reports an unhandled Error to TraceKit. + * @param {Error} ex + * @param {?boolean} rethrow If false, do not re-throw the exception. + * Only used for window.onerror to not cause an infinite loop of + * rethrowing. + */ + function report(ex, rethrow) { + var args = _slice.call(arguments, 1); + if (lastExceptionStack) { + if (lastException === ex) { + return; // already caught by an inner catch block, ignore + } else { + processLastException(); + } + } + + var stack = TraceKit.computeStackTrace(ex); + lastExceptionStack = stack; + lastException = ex; + lastArgs = args; + + // If the stack trace is incomplete, wait for 2 seconds for + // slow slow IE to see if onerror occurs or not before reporting + // this exception; otherwise, we will end up with an incomplete + // stack trace + setTimeout(function() { + if (lastException === ex) { + processLastException(); + } + }, stack.incomplete ? 2000 : 0); + + if (rethrow !== false) { + throw ex; // re-throw to propagate to the top level (and cause window.onerror) + } + } + + report.subscribe = subscribe; + report.unsubscribe = unsubscribe; + report.uninstall = unsubscribeAll; + return report; +})(); + +/** + * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript + * + * Syntax: + * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below) + * Returns: + * s.name - exception name + * s.message - exception message + * s.stack[i].url - JavaScript or HTML file URL + * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work) + * s.stack[i].args - arguments passed to the function, if known + * s.stack[i].line - line number, if known + * s.stack[i].column - column number, if known + * + * Supports: + * - Firefox: full stack trace with line numbers and unreliable column + * number on top frame + * - Opera 10: full stack trace with line and column numbers + * - Opera 9-: full stack trace with line numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the topmost stacktrace element + * only + * - IE: no line numbers whatsoever + * + * Tries to guess names of anonymous functions by looking for assignments + * in the source code. In IE and Safari, we have to guess source file names + * by searching for function bodies inside all page scripts. This will not + * work for scripts that are loaded cross-domain. + * Here be dragons: some function names may be guessed incorrectly, and + * duplicate functions may be mismatched. + * + * TraceKit.computeStackTrace should only be used for tracing purposes. + * Logging of unhandled exceptions should be done with TraceKit.report, + * which builds on top of TraceKit.computeStackTrace and provides better + * IE support by utilizing the window.onerror event to retrieve information + * about the top of the stack. + * + * Note: In IE and Safari, no stack trace is recorded on the Error object, + * so computeStackTrace instead walks its *own* chain of callers. + * This means that: + * * in Safari, some methods may be missing from the stack trace; + * * in IE, the topmost function in the stack trace will always be the + * caller of computeStackTrace. + * + * This is okay for tracing (because you are likely to be calling + * computeStackTrace from the function you want to be the topmost element + * of the stack trace anyway), but not okay for logging unhandled + * exceptions (because your catch block will likely be far away from the + * inner function that actually caused the exception). + * + */ +TraceKit.computeStackTrace = (function computeStackTraceWrapper() { + // Contents of Exception in various browsers. + // + // SAFARI: + // ex.message = Can't find variable: qq + // ex.line = 59 + // ex.sourceId = 580238192 + // ex.sourceURL = http://... + // ex.expressionBeginOffset = 96 + // ex.expressionCaretOffset = 98 + // ex.expressionEndOffset = 98 + // ex.name = ReferenceError + // + // FIREFOX: + // ex.message = qq is not defined + // ex.fileName = http://... + // ex.lineNumber = 59 + // ex.columnNumber = 69 + // ex.stack = ...stack trace... (see the example below) + // ex.name = ReferenceError + // + // CHROME: + // ex.message = qq is not defined + // ex.name = ReferenceError + // ex.type = not_defined + // ex.arguments = ['aa'] + // ex.stack = ...stack trace... + // + // INTERNET EXPLORER: + // ex.message = ... + // ex.name = ReferenceError + // + // OPERA: + // ex.message = ...message... (see the example below) + // ex.name = ReferenceError + // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message) + // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' + + /** + * Computes stack trace information from the stack property. + * Chrome and Gecko use this property. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceFromStackProp(ex) { + if (typeof ex.stack === 'undefined' || !ex.stack) return; + + var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; + var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i; + // NOTE: blob urls are now supposed to always have an origin, therefore it's format + // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well + var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i; + // Used to additionally parse URL/line/column from eval frames + var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; + var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/; + var lines = ex.stack.split('\n'); + var stack = []; + var submatch; + var parts; + var element; + var reference = /^(.*) is undefined$/.exec(ex.message); + + for (var i = 0, j = lines.length; i < j; ++i) { + if ((parts = chrome.exec(lines[i]))) { + var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line + var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line + if (isEval && (submatch = chromeEval.exec(parts[2]))) { + // throw out eval line/column and use top-most line/column number + parts[2] = submatch[1]; // url + parts[3] = submatch[2]; // line + parts[4] = submatch[3]; // column + } + element = { + url: !isNative ? parts[2] : null, + func: parts[1] || UNKNOWN_FUNCTION, + args: isNative ? [parts[2]] : [], + line: parts[3] ? +parts[3] : null, + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = winjs.exec(lines[i]))) { + element = { + url: parts[2], + func: parts[1] || UNKNOWN_FUNCTION, + args: [], + line: +parts[3], + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = gecko.exec(lines[i]))) { + var isEval = parts[3] && parts[3].indexOf(' > eval') > -1; + if (isEval && (submatch = geckoEval.exec(parts[3]))) { + // throw out eval line/column and use top-most line number + parts[3] = submatch[1]; + parts[4] = submatch[2]; + parts[5] = null; // no column when eval + } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') { + // FireFox uses this awesome columnNumber property for its top frame + // Also note, Firefox's column number is 0-based and everything else expects 1-based, + // so adding 1 + // NOTE: this hack doesn't work if top-most frame is eval + stack[0].column = ex.columnNumber + 1; + } + element = { + url: parts[3], + func: parts[1] || UNKNOWN_FUNCTION, + args: parts[2] ? parts[2].split(',') : [], + line: parts[4] ? +parts[4] : null, + column: parts[5] ? +parts[5] : null + }; + } else { + continue; + } + + if (!element.func && element.line) { + element.func = UNKNOWN_FUNCTION; + } + + stack.push(element); + } + + if (!stack.length) { + return null; + } + + return { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + } + + /** + * Adds information about the first frame to incomplete stack traces. + * Safari and IE require this to get complete data on the first frame. + * @param {Object.} stackInfo Stack trace information from + * one of the compute* methods. + * @param {string} url The URL of the script that caused an error. + * @param {(number|string)} lineNo The line number of the script that + * caused an error. + * @param {string=} message The error generated by the browser, which + * hopefully contains the name of the object that caused the error. + * @return {boolean} Whether or not the stack information was + * augmented. + */ + function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) { + var initial = { + url: url, + line: lineNo + }; + + if (initial.url && initial.line) { + stackInfo.incomplete = false; + + if (!initial.func) { + initial.func = UNKNOWN_FUNCTION; + } + + if (stackInfo.stack.length > 0) { + if (stackInfo.stack[0].url === initial.url) { + if (stackInfo.stack[0].line === initial.line) { + return false; // already in stack trace + } else if ( + !stackInfo.stack[0].line && + stackInfo.stack[0].func === initial.func + ) { + stackInfo.stack[0].line = initial.line; + return false; + } + } + } + + stackInfo.stack.unshift(initial); + stackInfo.partial = true; + return true; + } else { + stackInfo.incomplete = true; + } + + return false; + } + + /** + * Computes stack trace information by walking the arguments.caller + * chain at the time the exception occurred. This will cause earlier + * frames to be missed but is the only way to get any stack trace in + * Safari and IE. The top frame is restored by + * {@link augmentStackTraceWithInitialElement}. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceByWalkingCallerChain(ex, depth) { + var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, + stack = [], + funcs = {}, + recursion = false, + parts, + item; + + for ( + var curr = computeStackTraceByWalkingCallerChain.caller; + curr && !recursion; + curr = curr.caller + ) { + if (curr === computeStackTrace || curr === TraceKit.report) { + // console.log('skipping internal function'); + continue; + } + + item = { + url: null, + func: UNKNOWN_FUNCTION, + line: null, + column: null + }; + + if (curr.name) { + item.func = curr.name; + } else if ((parts = functionName.exec(curr.toString()))) { + item.func = parts[1]; + } + + if (typeof item.func === 'undefined') { + try { + item.func = parts.input.substring(0, parts.input.indexOf('{')); + } catch (e) {} + } + + if (funcs['' + curr]) { + recursion = true; + } else { + funcs['' + curr] = true; + } + + stack.push(item); + } + + if (depth) { + // console.log('depth is ' + depth); + // console.log('stack is ' + stack.length); + stack.splice(0, depth); + } + + var result = { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + augmentStackTraceWithInitialElement( + result, + ex.sourceURL || ex.fileName, + ex.line || ex.lineNumber, + ex.message || ex.description + ); + return result; + } + + /** + * Computes a stack trace for an exception. + * @param {Error} ex + * @param {(string|number)=} depth + */ + function computeStackTrace(ex, depth) { + var stack = null; + depth = depth == null ? 0 : +depth; + + try { + stack = computeStackTraceFromStackProp(ex); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + + try { + stack = computeStackTraceByWalkingCallerChain(ex, depth + 1); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + return { + name: ex.name, + message: ex.message, + url: getLocationHref() + }; + } + + computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement; + computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp; + + return computeStackTrace; +})(); + +var tracekit = TraceKit; + +/* + * JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +/* +* Add integers, wrapping at 2^32. This uses 16-bit operations internally +* to work around bugs in some JS interpreters. +*/ +function safeAdd(x, y) { + var lsw = (x & 0xffff) + (y & 0xffff); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xffff); +} + +/* +* Bitwise rotate a 32-bit number to the left. +*/ +function bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* +* These functions implement the four basic operations the algorithm uses. +*/ +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn((b & c) | (~b & d), a, b, x, s, t); +} +function md5gg(a, b, c, d, x, s, t) { + return md5cmn((b & d) | (c & ~d), a, b, x, s, t); +} +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} + +/* +* Calculate the MD5 of an array of little-endian words, and a bit length. +*/ +function binlMD5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + return [a, b, c, d]; +} + +/* +* Convert an array of little-endian words to a string +*/ +function binl2rstr(input) { + var i; + var output = ''; + var length32 = input.length * 32; + for (i = 0; i < length32; i += 8) { + output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff); + } + return output; +} + +/* +* Convert a raw string to an array of little-endian words +* Characters >255 have their high-byte silently ignored. +*/ +function rstr2binl(input) { + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; + for (i = 0; i < output.length; i += 1) { + output[i] = 0; + } + var length8 = input.length * 8; + for (i = 0; i < length8; i += 8) { + output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32); + } + return output; +} + +/* +* Calculate the MD5 of a raw string +*/ +function rstrMD5(s) { + return binl2rstr(binlMD5(rstr2binl(s), s.length * 8)); +} + +/* +* Calculate the HMAC-MD5, of a key and some data (raw strings) +*/ +function rstrHMACMD5(key, data) { + var i; + var bkey = rstr2binl(key); + var ipad = []; + var opad = []; + var hash; + ipad[15] = opad[15] = undefined; + if (bkey.length > 16) { + bkey = binlMD5(bkey, key.length * 8); + } + for (i = 0; i < 16; i += 1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5c5c5c5c; + } + hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); + return binl2rstr(binlMD5(opad.concat(hash), 512 + 128)); +} + +/* +* Convert a raw string to a hex string +*/ +function rstr2hex(input) { + var hexTab = '0123456789abcdef'; + var output = ''; + var x; + var i; + for (i = 0; i < input.length; i += 1) { + x = input.charCodeAt(i); + output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f); + } + return output; +} + +/* +* Encode a string as utf-8 +*/ +function str2rstrUTF8(input) { + return unescape(encodeURIComponent(input)); +} + +/* +* Take string arguments and return either raw or hex encoded strings +*/ +function rawMD5(s) { + return rstrMD5(str2rstrUTF8(s)); +} +function hexMD5(s) { + return rstr2hex(rawMD5(s)); +} +function rawHMACMD5(k, d) { + return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d)); +} +function hexHMACMD5(k, d) { + return rstr2hex(rawHMACMD5(k, d)); +} + +function md5(string, key, raw) { + if (!key) { + if (!raw) { + return hexMD5(string); + } + return rawMD5(string); + } + if (!raw) { + return hexHMACMD5(key, string); + } + return rawHMACMD5(key, string); +} + +var md5_1 = md5; + +function RavenConfigError(message) { + this.name = 'RavenConfigError'; + this.message = message; +} +RavenConfigError.prototype = new Error(); +RavenConfigError.prototype.constructor = RavenConfigError; + +var configError = RavenConfigError; + +var wrapMethod = function(console, level, callback) { + var originalConsoleLevel = console[level]; + var originalConsole = console; + + if (!(level in console)) { + return; + } + + var sentryLevel = level === 'warn' ? 'warning' : level; + + console[level] = function() { + var args = [].slice.call(arguments); + + var msg = utils.safeJoin(args, ' '); + var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}}; + + if (level === 'assert') { + if (args[0] === false) { + // Default browsers message + msg = + 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert'); + data.extra.arguments = args.slice(1); + callback && callback(msg, data); + } + } else { + callback && callback(msg, data); + } + + // this fails for some browsers. :( + if (originalConsoleLevel) { + // IE9 doesn't allow calling apply on console functions directly + // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193 + Function.prototype.apply.call(originalConsoleLevel, originalConsole, args); + } + }; +}; + +var console$1 = { + wrapMethod: wrapMethod +}; + +/*global XDomainRequest:false */ + + + + + + + +var isError = utils.isError; +var isObject = utils.isObject; +var isPlainObject = utils.isPlainObject; +var isErrorEvent = utils.isErrorEvent; +var isUndefined = utils.isUndefined; +var isFunction = utils.isFunction; +var isString = utils.isString; +var isArray = utils.isArray; +var isEmptyObject = utils.isEmptyObject; +var each = utils.each; +var objectMerge = utils.objectMerge; +var truncate = utils.truncate; +var objectFrozen = utils.objectFrozen; +var hasKey = utils.hasKey; +var joinRegExp = utils.joinRegExp; +var urlencode = utils.urlencode; +var uuid4 = utils.uuid4; +var htmlTreeAsString = utils.htmlTreeAsString; +var isSameException = utils.isSameException; +var isSameStacktrace = utils.isSameStacktrace; +var parseUrl = utils.parseUrl; +var fill = utils.fill; +var supportsFetch = utils.supportsFetch; +var supportsReferrerPolicy = utils.supportsReferrerPolicy; +var serializeKeysForMessage = utils.serializeKeysForMessage; +var serializeException = utils.serializeException; + +var wrapConsoleMethod = console$1.wrapMethod; + +var dsnKeys = 'source protocol user pass host port path'.split(' '); +var dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/; + +function now() { + return +new Date(); +} + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window$1 = + typeof window !== 'undefined' + ? window + : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof self !== 'undefined' ? self : {}; +var _document = _window$1.document; +var _navigator = _window$1.navigator; + +function keepOriginalCallback(original, callback) { + return isFunction(callback) + ? function(data) { + return callback(data, original); + } + : callback; +} + +// First, check for JSON support +// If there is no JSON, we no-op the core features of Raven +// since JSON is required to encode the payload +function Raven$2() { + this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify); + // Raven can run in contexts where there's no document (react-native) + this._hasDocument = !isUndefined(_document); + this._hasNavigator = !isUndefined(_navigator); + this._lastCapturedException = null; + this._lastData = null; + this._lastEventId = null; + this._globalServer = null; + this._globalKey = null; + this._globalProject = null; + this._globalContext = {}; + this._globalOptions = { + // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin + release: _window$1.SENTRY_RELEASE && _window$1.SENTRY_RELEASE.id, + logger: 'javascript', + ignoreErrors: [], + ignoreUrls: [], + whitelistUrls: [], + includePaths: [], + headers: null, + collectWindowErrors: true, + captureUnhandledRejections: true, + maxMessageLength: 0, + + // By default, truncates URL values to 250 chars + maxUrlLength: 250, + stackTraceLimit: 50, + autoBreadcrumbs: true, + instrument: true, + sampleRate: 1 + }; + this._fetchDefaults = { + method: 'POST', + keepalive: true, + // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default + // https://caniuse.com/#feat=referrer-policy + // It doesn't. And it throw exception instead of ignoring this parameter... + // REF: https://github.com/getsentry/raven-js/issues/1233 + referrerPolicy: supportsReferrerPolicy() ? 'origin' : '' + }; + this._ignoreOnError = 0; + this._isRavenInstalled = false; + this._originalErrorStackTraceLimit = Error.stackTraceLimit; + // capture references to window.console *and* all its methods first + // before the console plugin has a chance to monkey patch + this._originalConsole = _window$1.console || {}; + this._originalConsoleMethods = {}; + this._plugins = []; + this._startTime = now(); + this._wrappedBuiltIns = []; + this._breadcrumbs = []; + this._lastCapturedEvent = null; + this._keypressTimeout; + this._location = _window$1.location; + this._lastHref = this._location && this._location.href; + this._resetBackoff(); + + // eslint-disable-next-line guard-for-in + for (var method in this._originalConsole) { + this._originalConsoleMethods[method] = this._originalConsole[method]; + } +} + +/* + * The core Raven singleton + * + * @this {Raven} + */ + +Raven$2.prototype = { + // Hardcode version string so that raven source can be loaded directly via + // webpack (using a build step causes webpack #1617). Grunt verifies that + // this value matches package.json during build. + // See: https://github.com/getsentry/raven-js/issues/465 + VERSION: '3.23.3', + + debug: false, + + TraceKit: tracekit, // alias to TraceKit + + /* + * Configure Raven with a DSN and extra options + * + * @param {string} dsn The public Sentry DSN + * @param {object} options Set of global options [optional] + * @return {Raven} + */ + config: function(dsn, options) { + var self = this; + + if (self._globalServer) { + this._logDebug('error', 'Error: Raven has already been configured'); + return self; + } + if (!dsn) return self; + + var globalOptions = self._globalOptions; + + // merge in options + if (options) { + each(options, function(key, value) { + // tags and extra are special and need to be put into context + if (key === 'tags' || key === 'extra' || key === 'user') { + self._globalContext[key] = value; + } else { + globalOptions[key] = value; + } + }); + } + + self.setDSN(dsn); + + // "Script error." is hard coded into browsers for errors that it can't read. + // this is the result of a script being pulled in from an external domain and CORS. + globalOptions.ignoreErrors.push(/^Script error\.?$/); + globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/); + + // join regexp rules into one big rule + globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors); + globalOptions.ignoreUrls = globalOptions.ignoreUrls.length + ? joinRegExp(globalOptions.ignoreUrls) + : false; + globalOptions.whitelistUrls = globalOptions.whitelistUrls.length + ? joinRegExp(globalOptions.whitelistUrls) + : false; + globalOptions.includePaths = joinRegExp(globalOptions.includePaths); + globalOptions.maxBreadcrumbs = Math.max( + 0, + Math.min(globalOptions.maxBreadcrumbs || 100, 100) + ); // default and hard limit is 100 + + var autoBreadcrumbDefaults = { + xhr: true, + console: true, + dom: true, + location: true, + sentry: true + }; + + var autoBreadcrumbs = globalOptions.autoBreadcrumbs; + if ({}.toString.call(autoBreadcrumbs) === '[object Object]') { + autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs); + } else if (autoBreadcrumbs !== false) { + autoBreadcrumbs = autoBreadcrumbDefaults; + } + globalOptions.autoBreadcrumbs = autoBreadcrumbs; + + var instrumentDefaults = { + tryCatch: true + }; + + var instrument = globalOptions.instrument; + if ({}.toString.call(instrument) === '[object Object]') { + instrument = objectMerge(instrumentDefaults, instrument); + } else if (instrument !== false) { + instrument = instrumentDefaults; + } + globalOptions.instrument = instrument; + + tracekit.collectWindowErrors = !!globalOptions.collectWindowErrors; + + // return for chaining + return self; + }, + + /* + * Installs a global window.onerror error handler + * to capture and report uncaught exceptions. + * At this point, install() is required to be called due + * to the way TraceKit is set up. + * + * @return {Raven} + */ + install: function() { + var self = this; + if (self.isSetup() && !self._isRavenInstalled) { + tracekit.report.subscribe(function() { + self._handleOnErrorStackInfo.apply(self, arguments); + }); + + if (self._globalOptions.captureUnhandledRejections) { + self._attachPromiseRejectionHandler(); + } + + self._patchFunctionToString(); + + if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) { + self._instrumentTryCatch(); + } + + if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs(); + + // Install all of the plugins + self._drainPlugins(); + + self._isRavenInstalled = true; + } + + Error.stackTraceLimit = self._globalOptions.stackTraceLimit; + return this; + }, + + /* + * Set the DSN (can be called multiple time unlike config) + * + * @param {string} dsn The public Sentry DSN + */ + setDSN: function(dsn) { + var self = this, + uri = self._parseDSN(dsn), + lastSlash = uri.path.lastIndexOf('/'), + path = uri.path.substr(1, lastSlash); + + self._dsn = dsn; + self._globalKey = uri.user; + self._globalSecret = uri.pass && uri.pass.substr(1); + self._globalProject = uri.path.substr(lastSlash + 1); + + self._globalServer = self._getGlobalServer(uri); + + self._globalEndpoint = + self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/'; + + // Reset backoff state since we may be pointing at a + // new project/server + this._resetBackoff(); + }, + + /* + * Wrap code within a context so Raven can capture errors + * reliably across domains that is executed immediately. + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The callback to be immediately executed within the context + * @param {array} args An array of arguments to be called with the callback [optional] + */ + context: function(options, func, args) { + if (isFunction(options)) { + args = func || []; + func = options; + options = undefined; + } + + return this.wrap(options, func).apply(this, args); + }, + + /* + * Wrap code within a context and returns back a new function to be executed + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The function to be wrapped in a new context + * @param {function} func A function to call before the try/catch wrapper [optional, private] + * @return {function} The newly wrapped functions with a context + */ + wrap: function(options, func, _before) { + var self = this; + // 1 argument has been passed, and it's not a function + // so just return it + if (isUndefined(func) && !isFunction(options)) { + return options; + } + + // options is optional + if (isFunction(options)) { + func = options; + options = undefined; + } + + // At this point, we've passed along 2 arguments, and the second one + // is not a function either, so we'll just return the second argument. + if (!isFunction(func)) { + return func; + } + + // We don't wanna wrap it twice! + try { + if (func.__raven__) { + return func; + } + + // If this has already been wrapped in the past, return that + if (func.__raven_wrapper__) { + return func.__raven_wrapper__; + } + } catch (e) { + // Just accessing custom props in some Selenium environments + // can cause a "Permission denied" exception (see raven-js#495). + // Bail on wrapping and return the function as-is (defers to window.onerror). + return func; + } + + function wrapped() { + var args = [], + i = arguments.length, + deep = !options || (options && options.deep !== false); + + if (_before && isFunction(_before)) { + _before.apply(this, arguments); + } + + // Recursively wrap all of a function's arguments that are + // functions themselves. + while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i]; + + try { + // Attempt to invoke user-land function + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it + // means Raven caught an error invoking your application code. This is + // expected behavior and NOT indicative of a bug with Raven.js. + return func.apply(this, args); + } catch (e) { + self._ignoreNextOnError(); + self.captureException(e, options); + throw e; + } + } + + // copy over properties of the old function + for (var property in func) { + if (hasKey(func, property)) { + wrapped[property] = func[property]; + } + } + wrapped.prototype = func.prototype; + + func.__raven_wrapper__ = wrapped; + // Signal that this function has been wrapped/filled already + // for both debugging and to prevent it to being wrapped/filled twice + wrapped.__raven__ = true; + wrapped.__orig__ = func; + + return wrapped; + }, + + /** + * Uninstalls the global error handler. + * + * @return {Raven} + */ + uninstall: function() { + tracekit.report.uninstall(); + + this._detachPromiseRejectionHandler(); + this._unpatchFunctionToString(); + this._restoreBuiltIns(); + this._restoreConsole(); + + Error.stackTraceLimit = this._originalErrorStackTraceLimit; + this._isRavenInstalled = false; + + return this; + }, + + /** + * Callback used for `unhandledrejection` event + * + * @param {PromiseRejectionEvent} event An object containing + * promise: the Promise that was rejected + * reason: the value with which the Promise was rejected + * @return void + */ + _promiseRejectionHandler: function(event) { + this._logDebug('debug', 'Raven caught unhandled promise rejection:', event); + this.captureException(event.reason); + }, + + /** + * Installs the global promise rejection handler. + * + * @return {raven} + */ + _attachPromiseRejectionHandler: function() { + this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this); + _window$1.addEventListener && + _window$1.addEventListener('unhandledrejection', this._promiseRejectionHandler); + return this; + }, + + /** + * Uninstalls the global promise rejection handler. + * + * @return {raven} + */ + _detachPromiseRejectionHandler: function() { + _window$1.removeEventListener && + _window$1.removeEventListener('unhandledrejection', this._promiseRejectionHandler); + return this; + }, + + /** + * Manually capture an exception and send it over to Sentry + * + * @param {error} ex An exception to be logged + * @param {object} options A specific set of options for this error [optional] + * @return {Raven} + */ + captureException: function(ex, options) { + options = objectMerge({trimHeadFrames: 0}, options ? options : {}); + + if (isErrorEvent(ex) && ex.error) { + // If it is an ErrorEvent with `error` property, extract it to get actual Error + ex = ex.error; + } else if (isError(ex)) { + // we have a real Error object + ex = ex; + } else if (isPlainObject(ex)) { + // If it is plain Object, serialize it manually and extract options + // This will allow us to group events based on top-level keys + // which is much better than creating new group when any key/value change + options = this._getCaptureExceptionOptionsFromPlainObject(options, ex); + ex = new Error(options.message); + } else { + // If none of previous checks were valid, then it means that + // it's not a plain Object + // it's not a valid ErrorEvent (one with an error property) + // it's not an Error + // So bail out and capture it as a simple message: + return this.captureMessage( + ex, + objectMerge(options, { + stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace + trimHeadFrames: options.trimHeadFrames + 1 + }) + ); + } + + // Store the raw exception object for potential debugging and introspection + this._lastCapturedException = ex; + + // TraceKit.report will re-raise any exception passed to it, + // which means you have to wrap it in try/catch. Instead, we + // can wrap it here and only re-raise if TraceKit.report + // raises an exception different from the one we asked to + // report on. + try { + var stack = tracekit.computeStackTrace(ex); + this._handleStackInfo(stack, options); + } catch (ex1) { + if (ex !== ex1) { + throw ex1; + } + } + + return this; + }, + + _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) { + var exKeys = Object.keys(ex).sort(); + var options = objectMerge(currentOptions, { + message: + 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys), + fingerprint: [md5_1(exKeys)], + extra: currentOptions.extra || {} + }); + options.extra.__serialized__ = serializeException(ex); + + return options; + }, + + /* + * Manually send a message to Sentry + * + * @param {string} msg A plain message to be captured in Sentry + * @param {object} options A specific set of options for this message [optional] + * @return {Raven} + */ + captureMessage: function(msg, options) { + // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an + // early call; we'll error on the side of logging anything called before configuration since it's + // probably something you should see: + if ( + !!this._globalOptions.ignoreErrors.test && + this._globalOptions.ignoreErrors.test(msg) + ) { + return; + } + + options = options || {}; + msg = msg + ''; // Make sure it's actually a string + + var data = objectMerge( + { + message: msg + }, + options + ); + + var ex; + // Generate a "synthetic" stack trace from this point. + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative + // of a bug with Raven.js. Sentry generates synthetic traces either by configuration, + // or if it catches a thrown object without a "stack" property. + try { + throw new Error(msg); + } catch (ex1) { + ex = ex1; + } + + // null exception name so `Error` isn't prefixed to msg + ex.name = null; + var stack = tracekit.computeStackTrace(ex); + + // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1] + var initialCall = isArray(stack.stack) && stack.stack[1]; + var fileurl = (initialCall && initialCall.url) || ''; + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + if (this._globalOptions.stacktrace || (options && options.stacktrace)) { + // fingerprint on msg, not stack trace (legacy behavior, could be revisited) + data.fingerprint = data.fingerprint == null ? msg : data.fingerprint; + + options = objectMerge( + { + trimHeadFrames: 0 + }, + options + ); + // Since we know this is a synthetic trace, the top frame (this function call) + // MUST be from Raven.js, so mark it for trimming + // We add to the trim counter so that callers can choose to trim extra frames, such + // as utility functions. + options.trimHeadFrames += 1; + + var frames = this._prepareFrames(stack, options); + data.stacktrace = { + // Sentry expects frames oldest to newest + frames: frames.reverse() + }; + } + + // Make sure that fingerprint is always wrapped in an array + if (data.fingerprint) { + data.fingerprint = isArray(data.fingerprint) + ? data.fingerprint + : [data.fingerprint]; + } + + // Fire away! + this._send(data); + + return this; + }, + + captureBreadcrumb: function(obj) { + var crumb = objectMerge( + { + timestamp: now() / 1000 + }, + obj + ); + + if (isFunction(this._globalOptions.breadcrumbCallback)) { + var result = this._globalOptions.breadcrumbCallback(crumb); + + if (isObject(result) && !isEmptyObject(result)) { + crumb = result; + } else if (result === false) { + return this; + } + } + + this._breadcrumbs.push(crumb); + if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) { + this._breadcrumbs.shift(); + } + return this; + }, + + addPlugin: function(plugin /*arg1, arg2, ... argN*/) { + var pluginArgs = [].slice.call(arguments, 1); + + this._plugins.push([plugin, pluginArgs]); + if (this._isRavenInstalled) { + this._drainPlugins(); + } + + return this; + }, + + /* + * Set/clear a user to be sent along with the payload. + * + * @param {object} user An object representing user data [optional] + * @return {Raven} + */ + setUserContext: function(user) { + // Intentionally do not merge here since that's an unexpected behavior. + this._globalContext.user = user; + + return this; + }, + + /* + * Merge extra attributes to be sent along with the payload. + * + * @param {object} extra An object representing extra data [optional] + * @return {Raven} + */ + setExtraContext: function(extra) { + this._mergeContext('extra', extra); + + return this; + }, + + /* + * Merge tags to be sent along with the payload. + * + * @param {object} tags An object representing tags [optional] + * @return {Raven} + */ + setTagsContext: function(tags) { + this._mergeContext('tags', tags); + + return this; + }, + + /* + * Clear all of the context. + * + * @return {Raven} + */ + clearContext: function() { + this._globalContext = {}; + + return this; + }, + + /* + * Get a copy of the current context. This cannot be mutated. + * + * @return {object} copy of context + */ + getContext: function() { + // lol javascript + return JSON.parse(stringify_1(this._globalContext)); + }, + + /* + * Set environment of application + * + * @param {string} environment Typically something like 'production'. + * @return {Raven} + */ + setEnvironment: function(environment) { + this._globalOptions.environment = environment; + + return this; + }, + + /* + * Set release version of application + * + * @param {string} release Typically something like a git SHA to identify version + * @return {Raven} + */ + setRelease: function(release) { + this._globalOptions.release = release; + + return this; + }, + + /* + * Set the dataCallback option + * + * @param {function} callback The callback to run which allows the + * data blob to be mutated before sending + * @return {Raven} + */ + setDataCallback: function(callback) { + var original = this._globalOptions.dataCallback; + this._globalOptions.dataCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the breadcrumbCallback option + * + * @param {function} callback The callback to run which allows filtering + * or mutating breadcrumbs + * @return {Raven} + */ + setBreadcrumbCallback: function(callback) { + var original = this._globalOptions.breadcrumbCallback; + this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the shouldSendCallback option + * + * @param {function} callback The callback to run which allows + * introspecting the blob before sending + * @return {Raven} + */ + setShouldSendCallback: function(callback) { + var original = this._globalOptions.shouldSendCallback; + this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback); + return this; + }, + + /** + * Override the default HTTP transport mechanism that transmits data + * to the Sentry server. + * + * @param {function} transport Function invoked instead of the default + * `makeRequest` handler. + * + * @return {Raven} + */ + setTransport: function(transport) { + this._globalOptions.transport = transport; + + return this; + }, + + /* + * Get the latest raw exception that was captured by Raven. + * + * @return {error} + */ + lastException: function() { + return this._lastCapturedException; + }, + + /* + * Get the last event id + * + * @return {string} + */ + lastEventId: function() { + return this._lastEventId; + }, + + /* + * Determine if Raven is setup and ready to go. + * + * @return {boolean} + */ + isSetup: function() { + if (!this._hasJSON) return false; // needs JSON support + if (!this._globalServer) { + if (!this.ravenNotConfiguredError) { + this.ravenNotConfiguredError = true; + this._logDebug('error', 'Error: Raven has not been configured.'); + } + return false; + } + return true; + }, + + afterLoad: function() { + // TODO: remove window dependence? + + // Attempt to initialize Raven on load + var RavenConfig = _window$1.RavenConfig; + if (RavenConfig) { + this.config(RavenConfig.dsn, RavenConfig.config).install(); + } + }, + + showReportDialog: function(options) { + if ( + !_document // doesn't work without a document (React native) + ) + return; + + options = options || {}; + + var lastEventId = options.eventId || this.lastEventId(); + if (!lastEventId) { + throw new configError('Missing eventId'); + } + + var dsn = options.dsn || this._dsn; + if (!dsn) { + throw new configError('Missing DSN'); + } + + var encode = encodeURIComponent; + var qs = ''; + qs += '?eventId=' + encode(lastEventId); + qs += '&dsn=' + encode(dsn); + + var user = options.user || this._globalContext.user; + if (user) { + if (user.name) qs += '&name=' + encode(user.name); + if (user.email) qs += '&email=' + encode(user.email); + } + + var globalServer = this._getGlobalServer(this._parseDSN(dsn)); + + var script = _document.createElement('script'); + script.async = true; + script.src = globalServer + '/api/embed/error-page/' + qs; + (_document.head || _document.body).appendChild(script); + }, + + /**** Private functions ****/ + _ignoreNextOnError: function() { + var self = this; + this._ignoreOnError += 1; + setTimeout(function() { + // onerror should trigger before setTimeout + self._ignoreOnError -= 1; + }); + }, + + _triggerEvent: function(eventType, options) { + // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it + var evt, key; + + if (!this._hasDocument) return; + + options = options || {}; + + eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1); + + if (_document.createEvent) { + evt = _document.createEvent('HTMLEvents'); + evt.initEvent(eventType, true, true); + } else { + evt = _document.createEventObject(); + evt.eventType = eventType; + } + + for (key in options) + if (hasKey(options, key)) { + evt[key] = options[key]; + } + + if (_document.createEvent) { + // IE9 if standards + _document.dispatchEvent(evt); + } else { + // IE8 regardless of Quirks or Standards + // IE9 if quirks + try { + _document.fireEvent('on' + evt.eventType.toLowerCase(), evt); + } catch (e) { + // Do nothing + } + } + }, + + /** + * Wraps addEventListener to capture UI breadcrumbs + * @param evtName the event name (e.g. "click") + * @returns {Function} + * @private + */ + _breadcrumbEventHandler: function(evtName) { + var self = this; + return function(evt) { + // reset keypress timeout; e.g. triggering a 'click' after + // a 'keypress' will reset the keypress debounce so that a new + // set of keypresses can be recorded + self._keypressTimeout = null; + + // It's possible this handler might trigger multiple times for the same + // event (e.g. event propagation through node ancestors). Ignore if we've + // already captured the event. + if (self._lastCapturedEvent === evt) return; + + self._lastCapturedEvent = evt; + + // try/catch both: + // - accessing evt.target (see getsentry/raven-js#838, #768) + // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly + // can throw an exception in some circumstances. + var target; + try { + target = htmlTreeAsString(evt.target); + } catch (e) { + target = ''; + } + + self.captureBreadcrumb({ + category: 'ui.' + evtName, // e.g. ui.click, ui.input + message: target + }); + }; + }, + + /** + * Wraps addEventListener to capture keypress UI events + * @returns {Function} + * @private + */ + _keypressEventHandler: function() { + var self = this, + debounceDuration = 1000; // milliseconds + + // TODO: if somehow user switches keypress target before + // debounce timeout is triggered, we will only capture + // a single breadcrumb from the FIRST target (acceptable?) + return function(evt) { + var target; + try { + target = evt.target; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + var tagName = target && target.tagName; + + // only consider keypress events on actual input elements + // this will disregard keypresses targeting body (e.g. tabbing + // through elements, hotkeys, etc) + if ( + !tagName || + (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) + ) + return; + + // record first keypress in a series, but ignore subsequent + // keypresses until debounce clears + var timeout = self._keypressTimeout; + if (!timeout) { + self._breadcrumbEventHandler('input')(evt); + } + clearTimeout(timeout); + self._keypressTimeout = setTimeout(function() { + self._keypressTimeout = null; + }, debounceDuration); + }; + }, + + /** + * Captures a breadcrumb of type "navigation", normalizing input URLs + * @param to the originating URL + * @param from the target URL + * @private + */ + _captureUrlChange: function(from, to) { + var parsedLoc = parseUrl(this._location.href); + var parsedTo = parseUrl(to); + var parsedFrom = parseUrl(from); + + // because onpopstate only tells you the "new" (to) value of location.href, and + // not the previous (from) value, we need to track the value of the current URL + // state ourselves + this._lastHref = to; + + // Use only the path component of the URL if the URL matches the current + // document (almost all the time when using pushState) + if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) + to = parsedTo.relative; + if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) + from = parsedFrom.relative; + + this.captureBreadcrumb({ + category: 'navigation', + data: { + to: to, + from: from + } + }); + }, + + _patchFunctionToString: function() { + var self = this; + self._originalFunctionToString = Function.prototype.toString; + // eslint-disable-next-line no-extend-native + Function.prototype.toString = function() { + if (typeof this === 'function' && this.__raven__) { + return self._originalFunctionToString.apply(this.__orig__, arguments); + } + return self._originalFunctionToString.apply(this, arguments); + }; + }, + + _unpatchFunctionToString: function() { + if (this._originalFunctionToString) { + // eslint-disable-next-line no-extend-native + Function.prototype.toString = this._originalFunctionToString; + } + }, + + /** + * Wrap timer functions and event targets to catch errors and provide + * better metadata. + */ + _instrumentTryCatch: function() { + var self = this; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapTimeFn(orig) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + var originalCallback = args[0]; + if (isFunction(originalCallback)) { + args[0] = self.wrap(originalCallback); + } + + // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it + // also supports only two arguments and doesn't care what this is, so we + // can just call the original function directly. + if (orig.apply) { + return orig.apply(this, args); + } else { + return orig(args[0], args[1]); + } + }; + } + + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + function wrapEventTarget(global) { + var proto = _window$1[global] && _window$1[global].prototype; + if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) { + fill( + proto, + 'addEventListener', + function(orig) { + return function(evtName, fn, capture, secure) { + // preserve arity + try { + if (fn && fn.handleEvent) { + fn.handleEvent = self.wrap(fn.handleEvent); + } + } catch (err) { + // can sometimes get 'Permission denied to access property "handle Event' + } + + // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs` + // so that we don't have more than one wrapper function + var before, clickHandler, keypressHandler; + + if ( + autoBreadcrumbs && + autoBreadcrumbs.dom && + (global === 'EventTarget' || global === 'Node') + ) { + // NOTE: generating multiple handlers per addEventListener invocation, should + // revisit and verify we can just use one (almost certainly) + clickHandler = self._breadcrumbEventHandler('click'); + keypressHandler = self._keypressEventHandler(); + before = function(evt) { + // need to intercept every DOM event in `before` argument, in case that + // same wrapped method is re-used for different events (e.g. mousemove THEN click) + // see #724 + if (!evt) return; + + var eventType; + try { + eventType = evt.type; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + if (eventType === 'click') return clickHandler(evt); + else if (eventType === 'keypress') return keypressHandler(evt); + }; + } + return orig.call( + this, + evtName, + self.wrap(fn, undefined, before), + capture, + secure + ); + }; + }, + wrappedBuiltIns + ); + fill( + proto, + 'removeEventListener', + function(orig) { + return function(evt, fn, capture, secure) { + try { + fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn); + } catch (e) { + // ignore, accessing __raven_wrapper__ will throw in some Selenium environments + } + return orig.call(this, evt, fn, capture, secure); + }; + }, + wrappedBuiltIns + ); + } + } + + fill(_window$1, 'setTimeout', wrapTimeFn, wrappedBuiltIns); + fill(_window$1, 'setInterval', wrapTimeFn, wrappedBuiltIns); + if (_window$1.requestAnimationFrame) { + fill( + _window$1, + 'requestAnimationFrame', + function(orig) { + return function(cb) { + return orig(self.wrap(cb)); + }; + }, + wrappedBuiltIns + ); + } + + // event targets borrowed from bugsnag-js: + // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666 + var eventTargets = [ + 'EventTarget', + 'Window', + 'Node', + 'ApplicationCache', + 'AudioTrackList', + 'ChannelMergerNode', + 'CryptoOperation', + 'EventSource', + 'FileReader', + 'HTMLUnknownElement', + 'IDBDatabase', + 'IDBRequest', + 'IDBTransaction', + 'KeyOperation', + 'MediaController', + 'MessagePort', + 'ModalWindow', + 'Notification', + 'SVGElementInstance', + 'Screen', + 'TextTrack', + 'TextTrackCue', + 'TextTrackList', + 'WebSocket', + 'WebSocketWorker', + 'Worker', + 'XMLHttpRequest', + 'XMLHttpRequestEventTarget', + 'XMLHttpRequestUpload' + ]; + for (var i = 0; i < eventTargets.length; i++) { + wrapEventTarget(eventTargets[i]); + } + }, + + /** + * Instrument browser built-ins w/ breadcrumb capturing + * - XMLHttpRequests + * - DOM interactions (click/typing) + * - window.location changes + * - console + * + * Can be disabled or individually configured via the `autoBreadcrumbs` config option + */ + _instrumentBreadcrumbs: function() { + var self = this; + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapProp(prop, xhr) { + if (prop in xhr && isFunction(xhr[prop])) { + fill(xhr, prop, function(orig) { + return self.wrap(orig); + }); // intentionally don't track filled methods on XHR instances + } + } + + if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window$1) { + var xhrproto = XMLHttpRequest.prototype; + fill( + xhrproto, + 'open', + function(origOpen) { + return function(method, url) { + // preserve arity + + // if Sentry key appears in URL, don't capture + if (isString(url) && url.indexOf(self._globalKey) === -1) { + this.__raven_xhr = { + method: method, + url: url, + status_code: null + }; + } + + return origOpen.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + + fill( + xhrproto, + 'send', + function(origSend) { + return function() { + // preserve arity + var xhr = this; + + function onreadystatechangeHandler() { + if (xhr.__raven_xhr && xhr.readyState === 4) { + try { + // touching statusCode in some platforms throws + // an exception + xhr.__raven_xhr.status_code = xhr.status; + } catch (e) { + /* do nothing */ + } + + self.captureBreadcrumb({ + type: 'http', + category: 'xhr', + data: xhr.__raven_xhr + }); + } + } + + var props = ['onload', 'onerror', 'onprogress']; + for (var j = 0; j < props.length; j++) { + wrapProp(props[j], xhr); + } + + if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) { + fill( + xhr, + 'onreadystatechange', + function(orig) { + return self.wrap(orig, undefined, onreadystatechangeHandler); + } /* intentionally don't track this instrumentation */ + ); + } else { + // if onreadystatechange wasn't actually set by the page on this xhr, we + // are free to set our own and capture the breadcrumb + xhr.onreadystatechange = onreadystatechangeHandler; + } + + return origSend.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + } + + if (autoBreadcrumbs.xhr && supportsFetch()) { + fill( + _window$1, + 'fetch', + function(origFetch) { + return function() { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + + var fetchInput = args[0]; + var method = 'GET'; + var url; + + if (typeof fetchInput === 'string') { + url = fetchInput; + } else if ('Request' in _window$1 && fetchInput instanceof _window$1.Request) { + url = fetchInput.url; + if (fetchInput.method) { + method = fetchInput.method; + } + } else { + url = '' + fetchInput; + } + + // if Sentry key appears in URL, don't capture, as it's our own request + if (url.indexOf(self._globalKey) !== -1) { + return origFetch.apply(this, args); + } + + if (args[1] && args[1].method) { + method = args[1].method; + } + + var fetchData = { + method: method, + url: url, + status_code: null + }; + + return origFetch.apply(this, args).then(function(response) { + fetchData.status_code = response.status; + + self.captureBreadcrumb({ + type: 'http', + category: 'fetch', + data: fetchData + }); + + return response; + }); + }; + }, + wrappedBuiltIns + ); + } + + // Capture breadcrumbs from any click that is unhandled / bubbled up all the way + // to the document. Do this before we instrument addEventListener. + if (autoBreadcrumbs.dom && this._hasDocument) { + if (_document.addEventListener) { + _document.addEventListener('click', self._breadcrumbEventHandler('click'), false); + _document.addEventListener('keypress', self._keypressEventHandler(), false); + } else { + // IE8 Compatibility + _document.attachEvent('onclick', self._breadcrumbEventHandler('click')); + _document.attachEvent('onkeypress', self._keypressEventHandler()); + } + } + + // record navigation (URL) changes + // NOTE: in Chrome App environment, touching history.pushState, *even inside + // a try/catch block*, will cause Chrome to output an error to console.error + // borrowed from: https://github.com/angular/angular.js/pull/13945/files + var chrome = _window$1.chrome; + var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime; + var hasPushAndReplaceState = + !isChromePackagedApp && + _window$1.history && + history.pushState && + history.replaceState; + if (autoBreadcrumbs.location && hasPushAndReplaceState) { + // TODO: remove onpopstate handler on uninstall() + var oldOnPopState = _window$1.onpopstate; + _window$1.onpopstate = function() { + var currentHref = self._location.href; + self._captureUrlChange(self._lastHref, currentHref); + + if (oldOnPopState) { + return oldOnPopState.apply(this, arguments); + } + }; + + var historyReplacementFunction = function(origHistFunction) { + // note history.pushState.length is 0; intentionally not declaring + // params to preserve 0 arity + return function(/* state, title, url */) { + var url = arguments.length > 2 ? arguments[2] : undefined; + + // url argument is optional + if (url) { + // coerce to string (this is what pushState does) + self._captureUrlChange(self._lastHref, url + ''); + } + + return origHistFunction.apply(this, arguments); + }; + }; + + fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns); + fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns); + } + + if (autoBreadcrumbs.console && 'console' in _window$1 && console.log) { + // console + var consoleMethodCallback = function(msg, data) { + self.captureBreadcrumb({ + message: msg, + level: data.level, + category: 'console' + }); + }; + + each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) { + wrapConsoleMethod(console, level, consoleMethodCallback); + }); + } + }, + + _restoreBuiltIns: function() { + // restore any wrapped builtins + var builtin; + while (this._wrappedBuiltIns.length) { + builtin = this._wrappedBuiltIns.shift(); + + var obj = builtin[0], + name = builtin[1], + orig = builtin[2]; + + obj[name] = orig; + } + }, + + _restoreConsole: function() { + // eslint-disable-next-line guard-for-in + for (var method in this._originalConsoleMethods) { + this._originalConsole[method] = this._originalConsoleMethods[method]; + } + }, + + _drainPlugins: function() { + var self = this; + + // FIX ME TODO + each(this._plugins, function(_, plugin) { + var installer = plugin[0]; + var args = plugin[1]; + installer.apply(self, [self].concat(args)); + }); + }, + + _parseDSN: function(str) { + var m = dsnPattern.exec(str), + dsn = {}, + i = 7; + + try { + while (i--) dsn[dsnKeys[i]] = m[i] || ''; + } catch (e) { + throw new configError('Invalid DSN: ' + str); + } + + if (dsn.pass && !this._globalOptions.allowSecretKey) { + throw new configError( + 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key' + ); + } + + return dsn; + }, + + _getGlobalServer: function(uri) { + // assemble the endpoint from the uri pieces + var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : ''); + + if (uri.protocol) { + globalServer = uri.protocol + ':' + globalServer; + } + return globalServer; + }, + + _handleOnErrorStackInfo: function() { + // if we are intentionally ignoring errors via onerror, bail out + if (!this._ignoreOnError) { + this._handleStackInfo.apply(this, arguments); + } + }, + + _handleStackInfo: function(stackInfo, options) { + var frames = this._prepareFrames(stackInfo, options); + + this._triggerEvent('handle', { + stackInfo: stackInfo, + options: options + }); + + this._processException( + stackInfo.name, + stackInfo.message, + stackInfo.url, + stackInfo.lineno, + frames, + options + ); + }, + + _prepareFrames: function(stackInfo, options) { + var self = this; + var frames = []; + if (stackInfo.stack && stackInfo.stack.length) { + each(stackInfo.stack, function(i, stack) { + var frame = self._normalizeFrame(stack, stackInfo.url); + if (frame) { + frames.push(frame); + } + }); + + // e.g. frames captured via captureMessage throw + if (options && options.trimHeadFrames) { + for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) { + frames[j].in_app = false; + } + } + } + frames = frames.slice(0, this._globalOptions.stackTraceLimit); + return frames; + }, + + _normalizeFrame: function(frame, stackInfoUrl) { + // normalize the frames data + var normalized = { + filename: frame.url, + lineno: frame.line, + colno: frame.column, + function: frame.func || '?' + }; + + // Case when we don't have any information about the error + // E.g. throwing a string or raw object, instead of an `Error` in Firefox + // Generating synthetic error doesn't add any value here + // + // We should probably somehow let a user know that they should fix their code + if (!frame.url) { + normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler + } + + normalized.in_app = !// determine if an exception came from outside of our app + // first we check the global includePaths list. + ( + (!!this._globalOptions.includePaths.test && + !this._globalOptions.includePaths.test(normalized.filename)) || + // Now we check for fun, if the function name is Raven or TraceKit + /(Raven|TraceKit)\./.test(normalized['function']) || + // finally, we do a last ditch effort and check for raven.min.js + /raven\.(min\.)?js$/.test(normalized.filename) + ); + + return normalized; + }, + + _processException: function(type, message, fileurl, lineno, frames, options) { + var prefixedMessage = (type ? type + ': ' : '') + (message || ''); + if ( + !!this._globalOptions.ignoreErrors.test && + (this._globalOptions.ignoreErrors.test(message) || + this._globalOptions.ignoreErrors.test(prefixedMessage)) + ) { + return; + } + + var stacktrace; + + if (frames && frames.length) { + fileurl = frames[0].filename || fileurl; + // Sentry expects frames oldest to newest + // and JS sends them as newest to oldest + frames.reverse(); + stacktrace = {frames: frames}; + } else if (fileurl) { + stacktrace = { + frames: [ + { + filename: fileurl, + lineno: lineno, + in_app: true + } + ] + }; + } + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + var data = objectMerge( + { + // sentry.interfaces.Exception + exception: { + values: [ + { + type: type, + value: message, + stacktrace: stacktrace + } + ] + }, + culprit: fileurl + }, + options + ); + + // Fire away! + this._send(data); + }, + + _trimPacket: function(data) { + // For now, we only want to truncate the two different messages + // but this could/should be expanded to just trim everything + var max = this._globalOptions.maxMessageLength; + if (data.message) { + data.message = truncate(data.message, max); + } + if (data.exception) { + var exception = data.exception.values[0]; + exception.value = truncate(exception.value, max); + } + + var request = data.request; + if (request) { + if (request.url) { + request.url = truncate(request.url, this._globalOptions.maxUrlLength); + } + if (request.Referer) { + request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength); + } + } + + if (data.breadcrumbs && data.breadcrumbs.values) + this._trimBreadcrumbs(data.breadcrumbs); + + return data; + }, + + /** + * Truncate breadcrumb values (right now just URLs) + */ + _trimBreadcrumbs: function(breadcrumbs) { + // known breadcrumb properties with urls + // TODO: also consider arbitrary prop values that start with (https?)?:// + var urlProps = ['to', 'from', 'url'], + urlProp, + crumb, + data; + + for (var i = 0; i < breadcrumbs.values.length; ++i) { + crumb = breadcrumbs.values[i]; + if ( + !crumb.hasOwnProperty('data') || + !isObject(crumb.data) || + objectFrozen(crumb.data) + ) + continue; + + data = objectMerge({}, crumb.data); + for (var j = 0; j < urlProps.length; ++j) { + urlProp = urlProps[j]; + if (data.hasOwnProperty(urlProp) && data[urlProp]) { + data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength); + } + } + breadcrumbs.values[i].data = data; + } + }, + + _getHttpData: function() { + if (!this._hasNavigator && !this._hasDocument) return; + var httpData = {}; + + if (this._hasNavigator && _navigator.userAgent) { + httpData.headers = { + 'User-Agent': navigator.userAgent + }; + } + + // Check in `window` instead of `document`, as we may be in ServiceWorker environment + if (_window$1.location && _window$1.location.href) { + httpData.url = _window$1.location.href; + } + + if (this._hasDocument && _document.referrer) { + if (!httpData.headers) httpData.headers = {}; + httpData.headers.Referer = _document.referrer; + } + + return httpData; + }, + + _resetBackoff: function() { + this._backoffDuration = 0; + this._backoffStart = null; + }, + + _shouldBackoff: function() { + return this._backoffDuration && now() - this._backoffStart < this._backoffDuration; + }, + + /** + * Returns true if the in-process data payload matches the signature + * of the previously-sent data + * + * NOTE: This has to be done at this level because TraceKit can generate + * data from window.onerror WITHOUT an exception object (IE8, IE9, + * other old browsers). This can take the form of an "exception" + * data object with a single frame (derived from the onerror args). + */ + _isRepeatData: function(current) { + var last = this._lastData; + + if ( + !last || + current.message !== last.message || // defined for captureMessage + current.culprit !== last.culprit // defined for captureException/onerror + ) + return false; + + // Stacktrace interface (i.e. from captureMessage) + if (current.stacktrace || last.stacktrace) { + return isSameStacktrace(current.stacktrace, last.stacktrace); + } else if (current.exception || last.exception) { + // Exception interface (i.e. from captureException/onerror) + return isSameException(current.exception, last.exception); + } + + return true; + }, + + _setBackoffState: function(request) { + // If we are already in a backoff state, don't change anything + if (this._shouldBackoff()) { + return; + } + + var status = request.status; + + // 400 - project_id doesn't exist or some other fatal + // 401 - invalid/revoked dsn + // 429 - too many requests + if (!(status === 400 || status === 401 || status === 429)) return; + + var retry; + try { + // If Retry-After is not in Access-Control-Expose-Headers, most + // browsers will throw an exception trying to access it + if (supportsFetch()) { + retry = request.headers.get('Retry-After'); + } else { + retry = request.getResponseHeader('Retry-After'); + } + + // Retry-After is returned in seconds + retry = parseInt(retry, 10) * 1000; + } catch (e) { + /* eslint no-empty:0 */ + } + + this._backoffDuration = retry + ? // If Sentry server returned a Retry-After value, use it + retry + : // Otherwise, double the last backoff duration (starts at 1 sec) + this._backoffDuration * 2 || 1000; + + this._backoffStart = now(); + }, + + _send: function(data) { + var globalOptions = this._globalOptions; + + var baseData = { + project: this._globalProject, + logger: globalOptions.logger, + platform: 'javascript' + }, + httpData = this._getHttpData(); + + if (httpData) { + baseData.request = httpData; + } + + // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload + if (data.trimHeadFrames) delete data.trimHeadFrames; + + data = objectMerge(baseData, data); + + // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge + data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags); + data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra); + + // Send along our own collected metadata with extra + data.extra['session:duration'] = now() - this._startTime; + + if (this._breadcrumbs && this._breadcrumbs.length > 0) { + // intentionally make shallow copy so that additions + // to breadcrumbs aren't accidentally sent in this request + data.breadcrumbs = { + values: [].slice.call(this._breadcrumbs, 0) + }; + } + + if (this._globalContext.user) { + // sentry.interfaces.User + data.user = this._globalContext.user; + } + + // Include the environment if it's defined in globalOptions + if (globalOptions.environment) data.environment = globalOptions.environment; + + // Include the release if it's defined in globalOptions + if (globalOptions.release) data.release = globalOptions.release; + + // Include server_name if it's defined in globalOptions + if (globalOptions.serverName) data.server_name = globalOptions.serverName; + + // Cleanup empty properties before sending them to the server + Object.keys(data).forEach(function(key) { + if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) { + delete data[key]; + } + }); + + if (isFunction(globalOptions.dataCallback)) { + data = globalOptions.dataCallback(data) || data; + } + + // Why?????????? + if (!data || isEmptyObject(data)) { + return; + } + + // Check if the request should be filtered or not + if ( + isFunction(globalOptions.shouldSendCallback) && + !globalOptions.shouldSendCallback(data) + ) { + return; + } + + // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests), + // so drop requests until "cool-off" period has elapsed. + if (this._shouldBackoff()) { + this._logDebug('warn', 'Raven dropped error due to backoff: ', data); + return; + } + + if (typeof globalOptions.sampleRate === 'number') { + if (Math.random() < globalOptions.sampleRate) { + this._sendProcessedPayload(data); + } + } else { + this._sendProcessedPayload(data); + } + }, + + _getUuid: function() { + return uuid4(); + }, + + _sendProcessedPayload: function(data, callback) { + var self = this; + var globalOptions = this._globalOptions; + + if (!this.isSetup()) return; + + // Try and clean up the packet before sending by truncating long values + data = this._trimPacket(data); + + // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback, + // but this would require copying an un-truncated copy of the data packet, which can be + // arbitrarily deep (extra_data) -- could be worthwhile? will revisit + if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) { + this._logDebug('warn', 'Raven dropped repeat event: ', data); + return; + } + + // Send along an event_id if not explicitly passed. + // This event_id can be used to reference the error within Sentry itself. + // Set lastEventId after we know the error should actually be sent + this._lastEventId = data.event_id || (data.event_id = this._getUuid()); + + // Store outbound payload after trim + this._lastData = data; + + this._logDebug('debug', 'Raven about to send:', data); + + var auth = { + sentry_version: '7', + sentry_client: 'raven-js/' + this.VERSION, + sentry_key: this._globalKey + }; + + if (this._globalSecret) { + auth.sentry_secret = this._globalSecret; + } + + var exception = data.exception && data.exception.values[0]; + + // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy + if ( + this._globalOptions.autoBreadcrumbs && + this._globalOptions.autoBreadcrumbs.sentry + ) { + this.captureBreadcrumb({ + category: 'sentry', + message: exception + ? (exception.type ? exception.type + ': ' : '') + exception.value + : data.message, + event_id: data.event_id, + level: data.level || 'error' // presume error unless specified + }); + } + + var url = this._globalEndpoint; + (globalOptions.transport || this._makeRequest).call(this, { + url: url, + auth: auth, + data: data, + options: globalOptions, + onSuccess: function success() { + self._resetBackoff(); + + self._triggerEvent('success', { + data: data, + src: url + }); + callback && callback(); + }, + onError: function failure(error) { + self._logDebug('error', 'Raven transport failed to send: ', error); + + if (error.request) { + self._setBackoffState(error.request); + } + + self._triggerEvent('failure', { + data: data, + src: url + }); + error = error || new Error('Raven send failed (no additional details provided)'); + callback && callback(error); + } + }); + }, + + _makeRequest: function(opts) { + // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests + var url = opts.url + '?' + urlencode(opts.auth); + + var evaluatedHeaders = null; + var evaluatedFetchParameters = {}; + + if (opts.options.headers) { + evaluatedHeaders = this._evaluateHash(opts.options.headers); + } + + if (opts.options.fetchParameters) { + evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters); + } + + if (supportsFetch()) { + evaluatedFetchParameters.body = stringify_1(opts.data); + + var defaultFetchOptions = objectMerge({}, this._fetchDefaults); + var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters); + + if (evaluatedHeaders) { + fetchOptions.headers = evaluatedHeaders; + } + + return _window$1 + .fetch(url, fetchOptions) + .then(function(response) { + if (response.ok) { + opts.onSuccess && opts.onSuccess(); + } else { + var error = new Error('Sentry error code: ' + response.status); + // It's called request only to keep compatibility with XHR interface + // and not add more redundant checks in setBackoffState method + error.request = response; + opts.onError && opts.onError(error); + } + }) + ['catch'](function() { + opts.onError && + opts.onError(new Error('Sentry error code: network unavailable')); + }); + } + + var request = _window$1.XMLHttpRequest && new _window$1.XMLHttpRequest(); + if (!request) return; + + // if browser doesn't support CORS (e.g. IE7), we are out of luck + var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined'; + + if (!hasCORS) return; + + if ('withCredentials' in request) { + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } else if (request.status === 200) { + opts.onSuccess && opts.onSuccess(); + } else if (opts.onError) { + var err = new Error('Sentry error code: ' + request.status); + err.request = request; + opts.onError(err); + } + }; + } else { + request = new XDomainRequest(); + // xdomainrequest cannot go http -> https (or vice versa), + // so always use protocol relative + url = url.replace(/^https?:/, ''); + + // onreadystatechange not supported by XDomainRequest + if (opts.onSuccess) { + request.onload = opts.onSuccess; + } + if (opts.onError) { + request.onerror = function() { + var err = new Error('Sentry error code: XDomainRequest'); + err.request = request; + opts.onError(err); + }; + } + } + + request.open('POST', url); + + if (evaluatedHeaders) { + each(evaluatedHeaders, function(key, value) { + request.setRequestHeader(key, value); + }); + } + + request.send(stringify_1(opts.data)); + }, + + _evaluateHash: function(hash) { + var evaluated = {}; + + for (var key in hash) { + if (hash.hasOwnProperty(key)) { + var value = hash[key]; + evaluated[key] = typeof value === 'function' ? value() : value; + } + } + + return evaluated; + }, + + _logDebug: function(level) { + if (this._originalConsoleMethods[level] && this.debug) { + // In IE<10 console methods do not have their own 'apply' method + Function.prototype.apply.call( + this._originalConsoleMethods[level], + this._originalConsole, + [].slice.call(arguments, 1) + ); + } + }, + + _mergeContext: function(key, context) { + if (isUndefined(context)) { + delete this._globalContext[key]; + } else { + this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context); + } + } +}; + +// Deprecations +Raven$2.prototype.setUser = Raven$2.prototype.setUserContext; +Raven$2.prototype.setReleaseContext = Raven$2.prototype.setRelease; + +var raven = Raven$2; + +/** + * Enforces a single instance of the Raven client, and the + * main entry point for Raven. If you are a consumer of the + * Raven library, you SHOULD load this file (vs raven.js). + **/ + + + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof self !== 'undefined' ? self : {}; +var _Raven = _window.Raven; + +var Raven = new raven(); + +/* + * Allow multiple versions of Raven to be installed. + * Strip Raven from the global context and returns the instance. + * + * @return {Raven} + */ +Raven.noConflict = function() { + _window.Raven = _Raven; + return Raven; +}; + +Raven.afterLoad(); + +var singleton = Raven; + // ========================================================================== // Plyr.io demo // This code is purely for the https://plyr.io website // Please see readme.md in the root or github.com/sampotts/plyr // ========================================================================== +singleton.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install(); + document.addEventListener('DOMContentLoaded', function () { - if (window.shr) { - window.shr.setup({ - count: { - classname: 'button__count' + singleton.context(function () { + if (window.shr) { + window.shr.setup({ + count: { + classname: 'button__count' + } + }); + } + + // Setup tab focus + var tabClassName = 'tab-focus'; + + // Remove class on blur + document.addEventListener('focusout', function (event) { + event.target.classList.remove(tabClassName); + }); + + // Add classname to tabbed elements + document.addEventListener('keydown', function (event) { + if (event.keyCode !== 9) { + return; + } + + // Delay the adding of classname until the focus has changed + // This event fires before the focusin event + setTimeout(function () { + document.activeElement.classList.add(tabClassName); + }, 0); + }); + + // Setup the player + var player = new Plyr('#player', { + debug: true, + title: 'View From A Blue Moon', + iconUrl: '../dist/plyr.svg', + keyboard: { + global: true + }, + tooltips: { + controls: true + }, + captions: { + active: true + }, + keys: { + google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c' + }, + ads: { + enabled: true, + publisherId: '918848828995742' } }); - } - // Setup tab focus - var tabClassName = 'tab-focus'; + // Expose for tinkering in the console + window.player = player; - // Remove class on blur - document.addEventListener('focusout', function (event) { - event.target.classList.remove(tabClassName); - }); + // Setup type toggle + var buttons = document.querySelectorAll('[data-source]'); + var types = { + video: 'video', + audio: 'audio', + youtube: 'youtube', + vimeo: 'vimeo' + }; + var currentType = window.location.hash.replace('#', ''); + var historySupport = window.history && window.history.pushState; - // Add classname to tabbed elements - document.addEventListener('keydown', function (event) { - if (event.keyCode !== 9) { - return; + // Toggle class on an element + function toggleClass(element, className, state) { + if (element) { + element.classList[state ? 'add' : 'remove'](className); + } } - // Delay the adding of classname until the focus has changed - // This event fires before the focusin event - setTimeout(function () { - document.activeElement.classList.add(tabClassName); - }, 0); - }); + // Set a new source + function newSource(type, init) { + // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video + if (!(type in types) || !init && type === currentType || !currentType.length && type === types.video) { + return; + } - // Setup the player - var player = new Plyr('#player', { - debug: true, - title: 'View From A Blue Moon', - iconUrl: '../dist/plyr.svg', - keyboard: { - global: true - }, - tooltips: { - controls: true - }, - captions: { - active: true - }, - keys: { - google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c' - }, - ads: { - enabled: true, - publisherId: '918848828995742' - } - }); + switch (type) { + case types.video: + player.source = { + type: 'video', + title: 'View From A Blue Moon', + sources: [{ + src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', + type: 'video/mp4' + }], + poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', + tracks: [{ + kind: 'captions', + label: 'English', + srclang: 'en', + src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt', + default: true + }, { + kind: 'captions', + label: 'French', + srclang: 'fr', + src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt' + }] + }; - // Expose for tinkering in the console - window.player = player; + break; - // Setup type toggle - var buttons = document.querySelectorAll('[data-source]'); - var types = { - video: 'video', - audio: 'audio', - youtube: 'youtube', - vimeo: 'vimeo' - }; - var currentType = window.location.hash.replace('#', ''); - var historySupport = window.history && window.history.pushState; + case types.audio: + player.source = { + type: 'audio', + title: 'Kishi Bashi – “It All Began With A Burst”', + sources: [{ + src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3', + type: 'audio/mp3' + }, { + src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg', + type: 'audio/ogg' + }] + }; - // Toggle class on an element - function toggleClass(element, className, state) { - if (element) { - element.classList[state ? 'add' : 'remove'](className); - } - } + break; - // Set a new source - function newSource(type, init) { - // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video - if (!(type in types) || !init && type === currentType || !currentType.length && type === types.video) { - return; + case types.youtube: + player.source = { + type: 'video', + title: 'View From A Blue Moon', + sources: [{ + src: 'https://youtube.com/watch?v=bTqVqk7FSmY', + provider: 'youtube' + }] + }; + + break; + + case types.vimeo: + player.source = { + type: 'video', + sources: [{ + src: 'https://vimeo.com/76979871', + provider: 'vimeo' + }] + }; + + break; + + default: + break; + } + + // Set the current type for next time + currentType = type; + + // Remove active classes + Array.from(buttons).forEach(function (button) { + return toggleClass(button.parentElement, 'active', false); + }); + + // Set active on parent + toggleClass(document.querySelector('[data-source="' + type + '"]'), 'active', true); + + // Show cite + Array.from(document.querySelectorAll('.plyr__cite')).forEach(function (cite) { + cite.setAttribute('hidden', ''); + }); + document.querySelector('.plyr__cite--' + type).removeAttribute('hidden'); } - switch (type) { - case types.video: - player.source = { - type: 'video', - title: 'View From A Blue Moon', - sources: [{ - src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', - type: 'video/mp4' - }], - poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', - tracks: [{ - kind: 'captions', - label: 'English', - srclang: 'en', - src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt', - default: true - }, { - kind: 'captions', - label: 'French', - srclang: 'fr', - src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt' - }] - }; - - break; - - case types.audio: - player.source = { - type: 'audio', - title: 'Kishi Bashi – “It All Began With A Burst”', - sources: [{ - src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3', - type: 'audio/mp3' - }, { - src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg', - type: 'audio/ogg' - }] - }; - - break; - - case types.youtube: - player.source = { - type: 'video', - title: 'View From A Blue Moon', - sources: [{ - src: 'https://youtube.com/watch?v=bTqVqk7FSmY', - provider: 'youtube' - }] - }; - - break; - - case types.vimeo: - player.source = { - type: 'video', - sources: [{ - src: 'https://vimeo.com/76979871', - provider: 'vimeo' - }] - }; - - break; - - default: - break; - } - - // Set the current type for next time - currentType = type; - - // Remove active classes + // Bind to each button Array.from(buttons).forEach(function (button) { - return toggleClass(button.parentElement, 'active', false); + button.addEventListener('click', function () { + var type = button.getAttribute('data-source'); + + newSource(type); + + if (historySupport) { + window.history.pushState({ type: type }, '', '#' + type); + } + }); }); - // Set active on parent - toggleClass(document.querySelector('[data-source="' + type + '"]'), 'active', true); - - // Show cite - Array.from(document.querySelectorAll('.plyr__cite')).forEach(function (cite) { - cite.setAttribute('hidden', ''); - }); - document.querySelector('.plyr__cite--' + type).removeAttribute('hidden'); - } - - // Bind to each button - Array.from(buttons).forEach(function (button) { - button.addEventListener('click', function () { - var type = button.getAttribute('data-source'); - - newSource(type); - - if (historySupport) { - window.history.pushState({ type: type }, '', '#' + type); + // List for backwards/forwards + window.addEventListener('popstate', function (event) { + if (event.state && 'type' in event.state) { + newSource(event.state.type); } }); - }); - // List for backwards/forwards - window.addEventListener('popstate', function (event) { - if (event.state && 'type' in event.state) { - newSource(event.state.type); + // On load + if (historySupport) { + var video = !currentType.length; + + // If there's no current type set, assume video + if (video) { + currentType = types.video; + } + + // Replace current history state + if (currentType in types) { + window.history.replaceState({ + type: currentType + }, '', video ? '' : '#' + currentType); + } + + // If it's not video, load the source + if (currentType !== types.video) { + newSource(currentType, true); + } } }); - - // On load - if (historySupport) { - var video = !currentType.length; - - // If there's no current type set, assume video - if (video) { - currentType = types.video; - } - - // Replace current history state - if (currentType in types) { - window.history.replaceState({ - type: currentType - }, '', video ? '' : '#' + currentType); - } - - // If it's not video, load the source - if (currentType !== types.video) { - newSource(currentType, true); - } - } }); // Google analytics diff --git a/demo/dist/demo.js.map b/demo/dist/demo.js.map index 8eb61273..52dc9ef8 100644 --- a/demo/dist/demo.js.map +++ b/demo/dist/demo.js.map @@ -1 +1 @@ -{"version":3,"sources":["demo/src/js/demo.js"],"names":["document","addEventListener","window","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","host","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file +{"version":3,"sources":["node_modules/raven-js/vendor/json-stringify-safe/stringify.js","node_modules/raven-js/src/utils.js","node_modules/raven-js/vendor/TraceKit/tracekit.js","node_modules/raven-js/vendor/md5/md5.js","node_modules/raven-js/src/configError.js","node_modules/raven-js/src/console.js","node_modules/raven-js/src/raven.js","node_modules/raven-js/src/singleton.js","demo/src/js/demo.js"],"names":["_window","global","isObject","isError","isErrorEvent","isUndefined","isFunction","isPlainObject","isString","isArray","isEmptyObject","supportsFetch","supportsReferrerPolicy","each","hasKey","objectMerge","objectFrozen","truncate","joinRegExp","urlencode","parseUrl","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","fill","serializeException","stringify","serializeKeysForMessage","require$$0","Raven","TraceKit","md5","RavenConfigError","RavenConstructor","config","install","document","addEventListener","context","window","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","host","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch ({}.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n return !max || str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n var maxLength = 40;\n\n if (typeof value === 'string') {\n return value.length <= maxLength ? value : value.substr(0, maxLength - 1) + '\\u2026';\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.23.3',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason);\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch.apply(this, args).then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n if (this._originalConsoleMethods[level] && this.debug) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\nRaven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n\ndocument.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n },\n ],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n },\n ],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js index c6033c5a..89941e45 100644 --- a/demo/dist/demo.min.js +++ b/demo/dist/demo.min.js @@ -1,2 +1,2 @@ -!function(){"use strict";var e,t,o,i,r,a;document.addEventListener("DOMContentLoaded",function(){window.shr&&window.shr.setup({count:{classname:"button__count"}});document.addEventListener("focusout",function(e){e.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(e){9===e.keyCode&&setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var e=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0,publisherId:"918848828995742"}});window.player=e;var t=document.querySelectorAll("[data-source]"),o={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},i=window.location.hash.replace("#",""),r=window.history&&window.history.pushState;function a(e,t,o){e&&e.classList[o?"add":"remove"](t)}function n(r,n){if(r in o&&(n||r!==i)&&(i.length||r!==o.video)){switch(r){case o.video:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4",type:"video/mp4"}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case o.audio:e.source={type:"audio",title:"Kishi Bashi – “It All Began With A Burst”",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case o.youtube:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case o.vimeo:e.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}i=r,Array.from(t).forEach(function(e){return a(e.parentElement,"active",!1)}),a(document.querySelector('[data-source="'+r+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+r).removeAttribute("hidden")}}if(Array.from(t).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");n(t),r&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&n(e.state.type)}),r){var s=!i.length;s&&(i=o.video),i in o&&window.history.replaceState({type:i},"",s?"":"#"+i),i!==o.video&&n(i,!0)}}),"plyr.io"===window.location.host&&(e=window,t=document,o="script",i="ga",e.GoogleAnalyticsObject=i,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,r=t.createElement(o),a=t.getElementsByTagName(o)[0],r.async=1,r.src="https://www.google-analytics.com/analytics.js",a.parentNode.insertBefore(r,a),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}(); +!function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var t,r=(function(e,t){function r(e,t){for(var r=0;r0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=t.call(this,i,a))}else n.push(a);return null==e?a instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}(a):a:e.call(this,i,a)}}(e.exports=function(e,t,r,o){return JSON.stringify(e,n(t,o),r)}).getSerialize=n}(t={exports:{}},t.exports),t.exports),n="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{};function o(e){return void 0===e}function i(e){return"[object Object]"===Object.prototype.toString.call(e)}function a(e){return"[object String]"===Object.prototype.toString.call(e)}function s(e){return"[object Array]"===Object.prototype.toString.call(e)}function c(){try{return new ErrorEvent(""),!0}catch(e){return!1}}function l(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function u(e,t){var r,n;if(o(e.length))for(r in e)h(e,r)&&t.call(null,r,e[r]);else if(n=e.length)for(r=0;r ".length;e&&n++<5&&!("html"===(t=f(e))||n>1&&o+r.length*i+t.length>=80);)r.push(t),o+=t.length,e=e.parentNode;return r.reverse().join(" > ")},htmlElementAsString:f,isSameException:function(e,t){return!p(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(r=e.stacktrace,n=t.stacktrace,(!o(r)||!o(n))&&d(e.stacktrace,t.stacktrace)));var r,n},isSameStacktrace:d,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=t[6]||"",n=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+r+n}},fill:function(e,t,r,n){var o=e[t];e[t]=r(o),e[t].__raven__=!0,e[t].__orig__=o,n&&n.push([e,t,o])},safeJoin:function(e,t){if(!s(e))return"";for(var r=[],n=0;no?e(t,n-1):a},serializeKeysForMessage:function(e,t){if("number"==typeof e||"string"==typeof e)return e.toString();if(!Array.isArray(e))return"";if(0===(e=e.filter(function(e){return"string"==typeof e})).length)return"[object has no keys]";if(t="number"!=typeof t?v:t,e[0].length>=t)return e[0];for(var r=e.length;r>0;r--){var n=e.slice(0,r).join(", ");if(!(n.length>t))return r===e.length?n:n+"…"}return""}},E={collectWindowErrors:!0,debug:!1},w="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},k=[].slice,x="?",S=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function O(){return"undefined"==typeof document||null==document.location?"":document.location.href}E.report=function(){var e,t,r=[],n=null,o=null,i=null;function a(e,t){var n=null;if(!t||E.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[e].concat(k.call(arguments,2)))}catch(e){n=e}if(n)throw n}}function s(t,r,n,o,s){var l=y.isErrorEvent(s)?s.error:s,u=y.isErrorEvent(t)?t.message:t;if(i)E.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&y.isError(l))a(E.computeStackTrace(l),!0);else{var h,f={url:r,line:n,column:o},p=void 0;if("[object String]"==={}.toString.call(u))(h=u.match(S))&&(p=h[1],u=h[2]);f.func=x,a({name:p,message:u,url:O(),stack:[f]},!0)}return!!e&&e.apply(this,arguments)}function c(){var e=i,t=n;n=null,i=null,o=null,a.apply(null,[e,!1].concat(t))}function l(e,t){var r=k.call(arguments,1);if(i){if(o===e)return;c()}var a=E.computeStackTrace(e);if(i=a,o=e,n=r,setTimeout(function(){o===e&&c()},a.incomplete?2e3:0),!1!==t)throw e}return l.subscribe=function(n){t||(e=w.onerror,w.onerror=s,t=!0),r.push(n)},l.unsubscribe=function(e){for(var t=r.length-1;t>=0;--t)r[t]===e&&r.splice(t,1)},l.uninstall=function(){t&&(w.onerror=e,t=!1,e=void 0),r=[]},l}(),E.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=e.stack.split("\n"),u=[],h=(/^(.*) is undefined$/.exec(e.message),0),f=l.length;h eval")>-1&&(t=s.exec(r[3]))?(r[3]=t[1],r[4]=t[2],r[5]=null):0!==h||r[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),n={url:r[3],func:r[1]||x,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}!n.func&&n.line&&(n.func=x),u.push(n)}return u.length?{name:e.name,message:e.message,url:O(),stack:u}:null}}function t(e,t,r,n){var o={url:t,line:r};if(o.url&&o.line){if(e.incomplete=!1,o.func||(o.func=x),e.stack.length>0&&e.stack[0].url===o.url){if(e.stack[0].line===o.line)return!1;if(!e.stack[0].line&&e.stack[0].func===o.func)return e.stack[0].line=o.line,!1}return e.stack.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,h=r.caller;h&&!u;h=h.caller)if(h!==n&&h!==E.report){if(a={url:null,func:x,line:null,column:null},h.name?a.func=h.name:(i=s.exec(h.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(e){}l[""+h]?u=!0:l[""+h]=!0,c.push(a)}o&&c.splice(0,o);var f={name:e.name,message:e.message,url:O(),stack:c};return t(f,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),f}function n(t,n){var o=null;n=null==n?0:+n;try{if(o=e(t))return o}catch(e){if(E.debug)throw e}try{if(o=r(t,n+1))return o}catch(e){if(E.debug)throw e}return{name:t.name,message:t.message,url:O()}}return n.augmentStackTraceWithInitialElement=t,n.computeStackTraceFromStackProp=e,n}();var C=E;function R(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function j(e,t,r,n,o,i){return R((a=R(R(t,e),R(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function T(e,t,r,n,o,i,a){return j(t&r|~t&n,e,t,o,i,a)}function F(e,t,r,n,o,i,a){return j(t&n|r&~n,e,t,o,i,a)}function A(e,t,r,n,o,i,a){return j(t^r^n,e,t,o,i,a)}function B(e,t,r,n,o,i,a){return j(r^(t|~n),e,t,o,i,a)}function D(e,t){var r,n,o,i,a;e[t>>5]|=128<>>9<<4)]=t;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r>5]>>>t%32&255);return r}function L(e){var t,r=[];for(r[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<>>4&15)+"0123456789abcdef".charAt(15&t);return n}function I(e){return unescape(encodeURIComponent(e))}function U(e){return function(e){return H(D(L(e),8*e.length))}(I(e))}function N(e,t){return function(e,t){var r,n,o=L(e),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=D(o,8*e.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=D(i.concat(L(t)),512+8*t.length),H(D(a.concat(n),640))}(I(e),I(t))}var M=function(e,t,r){return t?r?N(t,e):P(N(t,e)):r?U(e):P(U(e))};function q(e){this.name="RavenConfigError",this.message=e}q.prototype=new Error,q.prototype.constructor=q;var z=q,W=function(e,t,r){var n=e[t],o=e;if(t in e){var i="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),a=y.safeJoin(e," "),s={level:i,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(a="Assertion failed: "+(y.safeJoin(e.slice(1)," ")||"console.assert"),s.extra.arguments=e.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,e)}}},K=y.isError,V=y.isObject,$=y.isPlainObject,J=y.isErrorEvent,X=y.isUndefined,G=y.isFunction,Y=y.isString,Z=y.isArray,Q=y.isEmptyObject,ee=y.each,te=y.objectMerge,re=y.truncate,ne=y.objectFrozen,oe=y.hasKey,ie=y.joinRegExp,ae=y.urlencode,se=y.uuid4,ce=y.htmlTreeAsString,le=y.isSameException,ue=y.isSameStacktrace,he=y.parseUrl,fe=y.fill,pe=y.supportsFetch,de=y.supportsReferrerPolicy,ge=y.serializeKeysForMessage,_e=y.serializeException,ve=W,me="source protocol user pass host port path".split(" "),be=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function ye(){return+new Date}var Ee="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},we=Ee.document,ke=Ee.navigator;function xe(e,t){return G(t)?function(r){return t(r,e)}:t}function Se(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!X(we),this._hasNavigator=!X(ke),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Ee.SENTRY_RELEASE&&Ee.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1},this._fetchDefaults={method:"POST",keepalive:!0,referrerPolicy:de()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Ee.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=ye(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Ee.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}Se.prototype={VERSION:"3.23.3",debug:!1,TraceKit:C,config:function(e,t){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!e)return r;var n=r._globalOptions;t&&ee(t,function(e,t){"tags"===e||"extra"===e||"user"===e?r._globalContext[e]=t:n[e]=t}),r.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=ie(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&ie(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&ie(n.whitelistUrls),n.includePaths=ie(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=te(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=te(a,s):!1!==s&&(s=a),n.instrument=s,C.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(C.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.captureUnhandledRejections&&e._attachPromiseRejectionHandler(),e._patchFunctionToString(),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),r=t.path.lastIndexOf("/"),n=t.path.substr(1,r);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(r+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,r){return G(e)&&(r=t||[],t=e,e=void 0),this.wrap(e,t).apply(this,r)},wrap:function(e,t,r){var n=this;if(X(t)&&!G(e))return e;if(G(e)&&(t=e,e=void 0),!G(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function o(){var o=[],i=arguments.length,a=!e||e&&!1!==e.deep;for(r&&G(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(e,arguments[i]):arguments[i];try{return t.apply(this,o)}catch(t){throw n._ignoreNextOnError(),n.captureException(t,e),t}}for(var i in t)oe(t,i)&&(o[i]=t[i]);return o.prototype=t.prototype,t.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=t,o},uninstall:function(){return C.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(e){this._logDebug("debug","Raven caught unhandled promise rejection:",e),this.captureException(e.reason)},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Ee.addEventListener&&Ee.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Ee.removeEventListener&&Ee.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=te({trimHeadFrames:0},t||{}),J(e)&&e.error)e=e.error;else if(K(e))e=e;else{if(!$(e))return this.captureMessage(e,te(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}this._lastCapturedException=e;try{var r=C.computeStackTrace(e);this._handleStackInfo(r,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var r=Object.keys(t).sort(),n=te(e,{message:"Non-Error exception captured with keys: "+ge(r),fingerprint:[M(r)],extra:e.extra||{}});return n.extra.__serialized__=_e(t),n},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var r,n=te({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){r=e}r.name=null;var o=C.computeStackTrace(r),i=Z(o.stack)&&o.stack[1],a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||t&&t.stacktrace){n.fingerprint=null==n.fingerprint?e:n.fingerprint,(t=te({trimHeadFrames:0},t)).trimHeadFrames+=1;var s=this._prepareFrames(o,t);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=Z(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(e){var t=te({timestamp:ye()/1e3},e);if(G(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(t);if(V(r)&&!Q(r))t=r;else if(!1===r)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(r(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=xe(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=xe(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=xe(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=Ee.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(we){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new z("Missing eventId");var r=e.dsn||this._dsn;if(!r)throw new z("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(t),o+="&dsn="+n(r);var i=e.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=we.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(we.head||we.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var r,n;if(this._hasDocument){for(n in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),we.createEvent?(r=we.createEvent("HTMLEvents")).initEvent(e,!0,!0):(r=we.createEventObject()).eventType=e,t)oe(t,n)&&(r[n]=t[n]);if(we.createEvent)we.dispatchEvent(r);else try{we.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(r){if(t._keypressTimeout=null,t._lastCapturedEvent!==r){var n;t._lastCapturedEvent=r;try{n=ce(r.target)}catch(e){n=""}t.captureBreadcrumb({category:"ui."+e,message:n})}}},_keypressEventHandler:function(){var e=this;return function(t){var r;try{r=t.target}catch(e){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=e._keypressTimeout;o||e._breadcrumbEventHandler("input")(t),clearTimeout(o),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var r=he(this._location.href),n=he(t),o=he(e);this._lastHref=t,r.protocol===n.protocol&&r.host===n.host&&(t=n.relative),r.protocol===o.protocol&&r.host===o.host&&(e=o.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_patchFunctionToString:function(){var e=this;e._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?e._originalFunctionToString.apply(this.__orig__,arguments):e._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function r(t){return function(r,n){for(var o=new Array(arguments.length),i=0;i2?arguments[2]:void 0;return r&&e._captureUrlChange(e._lastHref,r+""),t.apply(this,arguments)}};fe(history,"pushState",c,r),fe(history,"replaceState",c,r)}if(t.console&&"console"in Ee&&console.log){var l=function(t,r){e.captureBreadcrumb({message:t,level:r.level,category:"console"})};ee(["debug","info","warn","error","log"],function(e,t){ve(console,t,l)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],r=e[1],n=e[2];t[r]=n}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ee(this._plugins,function(t,r){var n=r[0],o=r[1];n.apply(e,[e].concat(o))})},_parseDSN:function(e){var t=be.exec(e),r={},n=7;try{for(;n--;)r[me[n]]=t[n]||""}catch(t){throw new z("Invalid DSN: "+e)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new z("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(){this._ignoreOnError||this._handleStackInfo.apply(this,arguments)},_handleStackInfo:function(e,t){var r=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,r,t)},_prepareFrames:function(e,t){var r=this,n=[];if(e.stack&&e.stack.length&&(ee(e.stack,function(t,o){var i=r._normalizeFrame(o,e.url);i&&n.push(i)}),t&&t.trimHeadFrames))for(var o=0;o0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||Q(e[t]))&&delete e[t]}),G(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!Q(e)&&(G(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random() {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file +{"version":3,"sources":["node_modules/raven-js/vendor/json-stringify-safe/stringify.js","node_modules/raven-js/src/utils.js","node_modules/raven-js/vendor/TraceKit/tracekit.js","node_modules/raven-js/vendor/md5/md5.js","node_modules/raven-js/src/configError.js","node_modules/raven-js/src/console.js","node_modules/raven-js/src/raven.js","node_modules/raven-js/src/singleton.js","demo/src/js/demo.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsErrorEvent","ErrorEvent","e","supportsFetch","Headers","Request","Response","each","callback","j","hasKey","object","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","substr","maxLength","type","utils","isObject","isError","isErrorEvent","isFunction","isEmptyObject","_","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","truncate","str","max","objectFrozen","isFrozen","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","filter","usedKeys","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","undefined","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","charAt","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","k","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","xhr","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","test","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","port","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","function","prefixedMessage","culprit","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","forEach","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","onload","open","setRequestHeader","send","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","singleton","shr","setup","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","historySupport","toggleClass","state","newSource","init","video","audio","youtube","vimeo","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"mappings":"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","file":"demo.min.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch ({}.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n return !max || str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n var maxLength = 40;\n\n if (typeof value === 'string') {\n return value.length <= maxLength ? value : value.substr(0, maxLength - 1) + '\\u2026';\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.23.3',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason);\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch.apply(this, args).then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n if (this._originalConsoleMethods[level] && this.debug) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\nRaven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n\ndocument.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n },\n ],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n },\n ],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index 59fe08d0..a51a8ad0 100644 --- a/demo/index.html +++ b/demo/index.html @@ -181,7 +181,7 @@ - + \ No newline at end of file diff --git a/demo/src/js/demo.js b/demo/src/js/demo.js index 5808cc7e..78d91390 100644 --- a/demo/src/js/demo.js +++ b/demo/src/js/demo.js @@ -4,222 +4,234 @@ // Please see readme.md in the root or github.com/sampotts/plyr // ========================================================================== +import Raven from 'raven-js'; + +Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install(); + document.addEventListener('DOMContentLoaded', () => { - if (window.shr) { - window.shr.setup({ - count: { - classname: 'button__count', + Raven.context(() => { + if (window.shr) { + window.shr.setup({ + count: { + classname: 'button__count', + }, + }); + } + + // Setup tab focus + const tabClassName = 'tab-focus'; + + // Remove class on blur + document.addEventListener('focusout', event => { + event.target.classList.remove(tabClassName); + }); + + // Add classname to tabbed elements + document.addEventListener('keydown', event => { + if (event.keyCode !== 9) { + return; + } + + // Delay the adding of classname until the focus has changed + // This event fires before the focusin event + setTimeout(() => { + document.activeElement.classList.add(tabClassName); + }, 0); + }); + + // Setup the player + const player = new Plyr('#player', { + debug: true, + title: 'View From A Blue Moon', + iconUrl: '../dist/plyr.svg', + keyboard: { + global: true, + }, + tooltips: { + controls: true, + }, + captions: { + active: true, + }, + keys: { + google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c', + }, + ads: { + enabled: true, + publisherId: '918848828995742', }, }); - } - // Setup tab focus - const tabClassName = 'tab-focus'; + // Expose for tinkering in the console + window.player = player; - // Remove class on blur - document.addEventListener('focusout', event => { - event.target.classList.remove(tabClassName); - }); + // Setup type toggle + const buttons = document.querySelectorAll('[data-source]'); + const types = { + video: 'video', + audio: 'audio', + youtube: 'youtube', + vimeo: 'vimeo', + }; + let currentType = window.location.hash.replace('#', ''); + const historySupport = window.history && window.history.pushState; - // Add classname to tabbed elements - document.addEventListener('keydown', event => { - if (event.keyCode !== 9) { - return; + // Toggle class on an element + function toggleClass(element, className, state) { + if (element) { + element.classList[state ? 'add' : 'remove'](className); + } } - // Delay the adding of classname until the focus has changed - // This event fires before the focusin event - setTimeout(() => { - document.activeElement.classList.add(tabClassName); - }, 0); - }); + // Set a new source + function newSource(type, init) { + // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video + if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) { + return; + } - // Setup the player - const player = new Plyr('#player', { - debug: true, - title: 'View From A Blue Moon', - iconUrl: '../dist/plyr.svg', - keyboard: { - global: true, - }, - tooltips: { - controls: true, - }, - captions: { - active: true, - }, - keys: { - google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c', - }, - ads: { - enabled: true, - publisherId: '918848828995742', - }, - }); + switch (type) { + case types.video: + player.source = { + type: 'video', + title: 'View From A Blue Moon', + sources: [ + { + src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', + type: 'video/mp4', + }, + ], + poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', + tracks: [ + { + kind: 'captions', + label: 'English', + srclang: 'en', + src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt', + default: true, + }, + { + kind: 'captions', + label: 'French', + srclang: 'fr', + src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', + }, + ], + }; - // Expose for tinkering in the console - window.player = player; + break; - // Setup type toggle - const buttons = document.querySelectorAll('[data-source]'); - const types = { - video: 'video', - audio: 'audio', - youtube: 'youtube', - vimeo: 'vimeo', - }; - let currentType = window.location.hash.replace('#', ''); - const historySupport = window.history && window.history.pushState; + case types.audio: + player.source = { + type: 'audio', + title: 'Kishi Bashi – “It All Began With A Burst”', + sources: [ + { + src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3', + type: 'audio/mp3', + }, + { + src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg', + type: 'audio/ogg', + }, + ], + }; - // Toggle class on an element - function toggleClass(element, className, state) { - if (element) { - element.classList[state ? 'add' : 'remove'](className); - } - } + break; - // Set a new source - function newSource(type, init) { - // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video - if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) { - return; + case types.youtube: + player.source = { + type: 'video', + title: 'View From A Blue Moon', + sources: [ + { + src: 'https://youtube.com/watch?v=bTqVqk7FSmY', + provider: 'youtube', + }, + ], + }; + + break; + + case types.vimeo: + player.source = { + type: 'video', + sources: [ + { + src: 'https://vimeo.com/76979871', + provider: 'vimeo', + }, + ], + }; + + break; + + default: + break; + } + + // Set the current type for next time + currentType = type; + + // Remove active classes + Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false)); + + // Set active on parent + toggleClass(document.querySelector(`[data-source="${type}"]`), 'active', true); + + // Show cite + Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => { + cite.setAttribute('hidden', ''); + }); + document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden'); } - switch (type) { - case types.video: - player.source = { - type: 'video', - title: 'View From A Blue Moon', - sources: [{ - src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', - type: 'video/mp4', - }], - poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', - tracks: [ - { - kind: 'captions', - label: 'English', - srclang: 'en', - src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt', - default: true, - }, - { - kind: 'captions', - label: 'French', - srclang: 'fr', - src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', - }, - ], - }; + // Bind to each button + Array.from(buttons).forEach(button => { + button.addEventListener('click', () => { + const type = button.getAttribute('data-source'); - break; + newSource(type); - case types.audio: - player.source = { - type: 'audio', - title: 'Kishi Bashi – “It All Began With A Burst”', - sources: [ - { - src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3', - type: 'audio/mp3', - }, - { - src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg', - type: 'audio/ogg', - }, - ], - }; - - break; - - case types.youtube: - player.source = { - type: 'video', - title: 'View From A Blue Moon', - sources: [{ - src: 'https://youtube.com/watch?v=bTqVqk7FSmY', - provider: 'youtube', - }], - }; - - break; - - case types.vimeo: - player.source = { - type: 'video', - sources: [{ - src: 'https://vimeo.com/76979871', - provider: 'vimeo', - }], - }; - - break; - - default: - break; - } - - // Set the current type for next time - currentType = type; - - // Remove active classes - Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false)); - - // Set active on parent - toggleClass(document.querySelector(`[data-source="${type}"]`), 'active', true); - - // Show cite - Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => { - cite.setAttribute('hidden', ''); + if (historySupport) { + window.history.pushState({ type }, '', `#${type}`); + } + }); }); - document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden'); - } - // Bind to each button - Array.from(buttons).forEach(button => { - button.addEventListener('click', () => { - const type = button.getAttribute('data-source'); - - newSource(type); - - if (historySupport) { - window.history.pushState({ type }, '', `#${type}`); + // List for backwards/forwards + window.addEventListener('popstate', event => { + if (event.state && 'type' in event.state) { + newSource(event.state.type); } }); - }); - // List for backwards/forwards - window.addEventListener('popstate', event => { - if (event.state && 'type' in event.state) { - newSource(event.state.type); + // On load + if (historySupport) { + const video = !currentType.length; + + // If there's no current type set, assume video + if (video) { + currentType = types.video; + } + + // Replace current history state + if (currentType in types) { + window.history.replaceState( + { + type: currentType, + }, + '', + video ? '' : `#${currentType}`, + ); + } + + // If it's not video, load the source + if (currentType !== types.video) { + newSource(currentType, true); + } } }); - - // On load - if (historySupport) { - const video = !currentType.length; - - // If there's no current type set, assume video - if (video) { - currentType = types.video; - } - - // Replace current history state - if (currentType in types) { - window.history.replaceState( - { - type: currentType, - }, - '', - video ? '' : `#${currentType}`, - ); - } - - // If it's not video, load the source - if (currentType !== types.video) { - newSource(currentType, true); - } - } }); // Google analytics diff --git a/dist/plyr.js b/dist/plyr.js index a4fad3a2..6be8cd25 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -77,7 +77,7 @@ var defaults = { // Sprite (for icons) loadSprite: true, iconPrefix: 'plyr', - iconUrl: 'https://cdn.plyr.io/3.0.0-beta.20/plyr.svg', + iconUrl: 'https://cdn.plyr.io/3.0.0/plyr.svg', // Blank video (used to prevent errors on source change) blankVideo: 'https://cdn.plyr.io/static/blank.mp4', @@ -6021,7 +6021,7 @@ var source = { // ========================================================================== // Plyr -// plyr.js v3.0.0-beta.20 +// plyr.js v3.0.0 // https://github.com/sampotts/plyr // License: The MIT License (MIT) // ========================================================================== diff --git a/dist/plyr.js.map b/dist/plyr.js.map index 409cfba3..3d201e80 100644 --- a/dist/plyr.js.map +++ b/dist/plyr.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/captions.js","src/js/ui.js","src/js/controls.js","src/js/listeners.js","src/js/storage.js","src/js/plugins/ads.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["providers","types","defaults","window","navigator","language","split","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","current","querySelector","callbacks","push","element","createElement","errors","forEach","cb","call","event","err","src","first","getElementsByTagName","parentNode","insertBefore","id","is","prefix","hasId","isCached","updateSprite","data","innerHTML","body","childNodes","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","value","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","source","shift","extend","youtube","vimeo","regex","RegExp","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","find","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","enter","exit","inFrame","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","msExitFullscreen","stored","get","toLowerCase","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","filter","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","timeUpdate","checkPlaying","ready","setTitle","label","i18n","title","isEmbed","iframe","frameTitle","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","suffix","played","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","getBadge","createBadge","createMenuItem","getLabel","updateSetting","getLanguage","default","none","disabled","hasTracks","toUpperCase","unshift","form","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","toggleCaptions","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","load","updateVolume","checkLoading","clickToPlay","touch","ended","disableContextMenu","set","concat","inputEvent","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","ads","initialized","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","advertisement","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","toString","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","toggled","soft","done","clear","unload","mime","readyState","targetTime","end","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.20/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(resolve);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(resolve);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(reject);\n\n // Bind callback\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new \n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new \n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid \n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create \n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add to \n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a
if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the