├── .npmignore ├── CHANGELOG.md ├── README.md ├── atatus.d.ts ├── atatus.min.js ├── bower.json ├── component.json └── package.json /.npmignore: -------------------------------------------------------------------------------- 1 | bower.json 2 | component.json -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Changelog 2 | ========= 3 | 4 | 4.6.4 5 | ----- 6 | 7 | - Add support for max duplicate errors option. 8 | 9 | 10 | 4.6.3 11 | ----- 12 | 13 | - Fix status code in Ajax abort failures. 14 | 15 | 16 | 4.6.2 17 | ----- 18 | 19 | - Add support for `onTransformRouteUrl` callback. 20 | 21 | 22 | 4.6.1 23 | ----- 24 | 25 | - Add support for INP web vital. 26 | 27 | 28 | 4.6.0 29 | ----- 30 | 31 | - Add timestamp support in XHR calls. 32 | 33 | 34 | 4.5.0 35 | ----- 36 | 37 | - Fixed fetch failure exceptions. 38 | - Fixed XHR payload sending. 39 | 40 | 41 | 4.4.1 42 | ----- 43 | 44 | - Fixed ignored urls. 45 | 46 | 47 | 4.4.0 48 | ----- 49 | 50 | - Fixed web vitals sending issue during page unload. 51 | - Fixed higher XHR timing issue. 52 | 53 | 54 | 4.3.2 55 | ----- 56 | 57 | - Fixed web vitals issue in ES6 and Require.js modules. 58 | - Updated collector endpoint. 59 | 60 | 61 | 4.3.1 62 | ----- 63 | 64 | - Fixed web vitals support for not supporting browser. 65 | 66 | 67 | 4.3.0 68 | ----- 69 | 70 | - Added web vitals support. 71 | 72 | 73 | 4.2.1 74 | ----- 75 | 76 | - Updated typescript definition file for setHashRoutes, setWhitelistUrls and setIgnoreUrls. 77 | 78 | 79 | 4.2.0 80 | ----- 81 | 82 | - Limit number of payloads sent to Atatus server. 83 | - Added limit to breadcrumb messages. 84 | - Added separate version to SPA. 85 | - Added support for network information. 86 | - Added support for detailed timing metrics. 87 | - Added support for hash route options. 88 | 89 | 90 | 4.1.1 91 | ----- 92 | 93 | - Fixed sending page load two times. 94 | 95 | 96 | 4.1.0 97 | ----- 98 | 99 | - Sent session data in XHR instead of query parameter. 100 | - Added SameSite=None in cookie. 101 | 102 | 103 | 4.0.4 104 | ----- 105 | 106 | - Fixed issue in type script set user definition. 107 | 108 | 4.0.3 109 | ----- 110 | 111 | - Added support for ignoreUrls and whitelistUrls 112 | 113 | 4.0.2 114 | ----- 115 | 116 | - Fixed slowest routes duration issue. 117 | - Fixed slowest route queue limit. 118 | 119 | 4.0.1 120 | ----- 121 | 122 | - Fixed typescript name issue. 123 | 124 | 4.0.0 125 | ----- 126 | 127 | - Added support for single page applications (SPA). 128 | - Allow AJAX duration up to 150 seconds 129 | - Ignore analytics domains in AJAX monitoring. 130 | - Updated recordTransactions with failure option. 131 | - Fixed negative number in scs timing. 132 | 133 | 3.1.1 134 | ----- 135 | 136 | - Fixed naming issue in typescript file. 137 | 138 | 3.1.0 139 | ----- 140 | 141 | - Added CommonJS, Browserify and AMD support. 142 | - Reported unhandled promise rejection as error. 143 | 144 | 3.0.9 145 | ----- 146 | 147 | - Added REGEX support for AJAX Allowed Domains. 148 | 149 | 3.0.8 150 | ----- 151 | 152 | - Added fetch as AJAX in session traces. 153 | - Fixed session variable issue. 154 | 155 | 3.0.7 156 | ----- 157 | - Limit number of errors to be stored in local storage during offline save. 158 | - Introduced "recordTransaction" to directly record custom duration. 159 | 160 | 3.0.6 161 | ----- 162 | - For individual errors, removed appending of original custom data, and tags. 163 | 164 | 3.0.5 165 | ----- 166 | - Fixed failed session payloads. Sorry, last fix does not work in certain scenario. 167 | 168 | 3.0.4 169 | ----- 170 | - Fixed failed session payloads. 171 | 172 | 3.0.3 173 | ----- 174 | - Added anonymize IP support 175 | 176 | 3.0.2 177 | ----- 178 | - Added regex support for allowed domains 179 | - Added Async support 180 | 181 | 3.0.1 182 | ----- 183 | - Removed UMD support. 184 | 185 | 3.0.0 186 | ----- 187 | - Added support for Session Tracking 188 | - Added support for Single Page Application route change performances 189 | 190 | 2.3.12 191 | ----- 192 | - Added console timeline support 193 | - Added console.error notify 194 | 195 | 2.3.11 196 | ----- 197 | - Added request object for on before send 198 | 199 | 2.3.10 200 | ----- 201 | - Added grouping key support 202 | - Added support for options in config object. 203 | - Added option to report console errors 204 | 205 | 2.3.9 206 | ----- 207 | - Added an option to disable Real User Monitoring 208 | 209 | 2.3.8 210 | ----- 211 | - Fixed version number and user id integer values 212 | - Added uninstall support 213 | 214 | 2.3.7 215 | ----- 216 | - Fixed enable sourcemap type issue. 217 | - Removed atatus URL from stacktrace 218 | 219 | 2.3.6 220 | ----- 221 | - Added user support 222 | - Removed sourcemap file 223 | 224 | 2.3.5 225 | ----- 226 | - Added a map file 227 | - Fixed ignore errors issue 228 | 229 | 2.3.4 230 | ----- 231 | - Fixed callback duration. 232 | - Removed 70 sec check in page load performance 233 | 234 | 2.3.3 235 | ----- 236 | - Increased AJAX Batch Size to 25 237 | - Renamed AJAX Payload key name. 238 | - Ignored Page Load time greater than 70 sec 239 | 240 | 2.3.2 241 | ----- 242 | - Removed query string from AJAX URL 243 | 244 | 2.3.1 245 | ----- 246 | - Fixed responseText issue 247 | 248 | 2.3.0 249 | ----- 250 | - Added support for Ajax Monitoring 251 | - Added support for Transaction Monitoring 252 | 253 | 2.2.5 254 | ----- 255 | - Added `isConfigured` to check whether API key is configured or not 256 | 257 | 2.2.4 258 | ----- 259 | - Fixed bug in jQuery.event wrapping if handler not a func 260 | - Handle exceptions on windows phone 8 in cordova 261 | - Normalize Firefox's 0-based column number 262 | 263 | 2.2.3 264 | ----- 265 | - Add support for source map 266 | - Add support for application version 267 | - Add a `onBeforeErrorSend` callback to allow filtering of errors being sent to Atatus 268 | 269 | 2.2.2 270 | ----- 271 | - Don't send duplicate exceptions from the client 272 | - Fixed bug navigation start with 0 instead of time 273 | - First version available on bower and npm as atatus-js 274 | 275 | 2.2.1 276 | ----- 277 | - Use image tag instead of CORS to make requests, for better cross-browser support 278 | 279 | 2.2.0 280 | ----- 281 | - Add support for performance 282 | 283 | 1.0.0 284 | ----- 285 | - First public release -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Atatus-JS 2 | 3 | [Atatus](https://www.atatus.com) Real User Monitoring and Advanced error tracking plugin for web. 4 | 5 | [Signup for Atatus](https://www.atatus.com/signup). 6 | 7 | ## Getting Started 8 | 9 | ### With Bower 10 | 11 | Run `bower install atatus-js` 12 | 13 | ### With NPM 14 | 15 | Run `npm install atatus-js --save` 16 | 17 | ## Usage 18 | 19 | In your web page: 20 | 21 | ```html 22 | 23 | 26 | ``` 27 | 28 | For more advanced options, refer [our documentation](https://www.atatus.com/docs). 29 | 30 | 31 | ### CDN 32 | 33 | Atatus is also available from our content delivery network: 34 | 35 | ```html 36 | 37 | 40 | ``` 41 | 42 | ### Module loaders (CommonJS) 43 | 44 | Atatus can be loaded using a module loader like Browserify or Webpack. 45 | 46 | ```javascript 47 | var atatus = require('atatus-js'); 48 | atatus.config('YOUR_API_KEY').install(); 49 | ``` 50 | 51 | -------------------------------------------------------------------------------- /atatus.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for atatus.js 2 | // Project: https://github.com/atatus/atatus-js 3 | 4 | interface AtatusOptions { 5 | 6 | /** Print debug message */ 7 | debugMode?: boolean; 8 | 9 | /** When present, the IP address of the sender will be anonymized. */ 10 | anonymizeIp?: boolean; 11 | 12 | /** When present, change hash routes into clean path. */ 13 | hashRoutes?: boolean; 14 | 15 | /** Control what should be monitored with Atatus */ 16 | disableBreadcrumbs?: boolean; 17 | disableErrorTracking?: boolean; 18 | disableAjaxMonitoring?: boolean; 19 | disableRUM?: boolean; 20 | disableSession?: boolean; 21 | disableSPA?: boolean; 22 | 23 | /** Report AJAX 4xx and 5xx status codes as error to Atatus */ 24 | reportAjaxErrors?: boolean; 25 | 26 | /** Report unhandled promise rejections as error to Atatus */ 27 | reportUnhandledRejections?: boolean; 28 | 29 | /** Additional data to be sent onto the error. */ 30 | customData?: Object; 31 | 32 | /** Additional Filterable data to be tagged onto the performance and error data. */ 33 | tags?: string[]; 34 | 35 | /** Save data during offline and Send it to Atatus when it is online. */ 36 | offline?: boolean; 37 | 38 | /** The release version of the application you are monitoring with Atatus */ 39 | version?: string; 40 | 41 | /** List of error messages to be filtered out before being sent to Atatus. */ 42 | ignoreErrors?: (RegExp | string)[]; 43 | 44 | /** DEPRECATED: Only report performances metrics from whole domains matching a regex pattern. */ 45 | allowedDomains?: (RegExp | string)[]; 46 | 47 | /** It will ignore performance metrics from whole urls matching a regex pattern or string. */ 48 | ignoreUrls?: (RegExp | string)[]; 49 | 50 | /** The inverse of ignoreUrls. Only report performance metrics from whole urls matching a regex pattern or string. */ 51 | whitelistUrls?: (RegExp | string)[]; 52 | 53 | // Enable or Disable all console activity 54 | console? : boolean; 55 | consoleTimeline? : boolean; 56 | consoleDisplay? : boolean; 57 | consoleErrorNotify? : boolean; 58 | consoleTimelineLevels? : string[]; 59 | 60 | /** A function which allows mutation of the data payload right before being sent to Atatus */ 61 | beforeSend?: (data: any) => any; 62 | 63 | /** A function which allows mutation of the error data payload right before being sent to Atatus */ 64 | beforeErrorSend?: (data: any) => any; 65 | 66 | /** A callback function that allows to specify the custom grouping key of the error. */ 67 | groupingKeyCallback?: (data: any) => string; 68 | 69 | /** By default, Atatus does not truncate messages. If you need to truncate characters for whatever reason, you may set this to limit the length. */ 70 | // maxMessageLength?: number; 71 | 72 | urlMaxLength?: number; 73 | maxDuplicateErrors?: number; 74 | } 75 | 76 | 77 | interface Atatus { 78 | 79 | /** Atatus.js version. */ 80 | VERSION: string; 81 | 82 | /** 83 | * If you need to conditionally check if atatus needs to be initialized or not, 84 | * you can use the isConfigured function. It will return true if Atatus is already initialized. 85 | * 86 | * @return {boolean} 87 | */ 88 | isConfigured(): boolean; 89 | 90 | /** 91 | * Allow multiple versions of Atatus to be installed. 92 | * Strip Atatus from the global context and returns the instance. 93 | * 94 | * @return {!Atatus} A self reference. 95 | */ 96 | noConflict(): Atatus; 97 | 98 | /** 99 | * Configure Atatus with a API Key and extra options 100 | * 101 | * @param {string} apiKey The public Atatus project API Key 102 | * @param {object} options Optional set of of global options [optional] 103 | * @return {!Atatus} A self reference. 104 | */ 105 | config(apiKey: string, options?: AtatusOptions): Atatus; 106 | 107 | /** 108 | * Installs all necessary configurations to capture errors and 109 | * performance metrics. 110 | * 111 | * @return {!Atatus} A self reference. 112 | */ 113 | install(): Atatus; 114 | 115 | /** 116 | * Un-install Atatus Agent 117 | * 118 | * @return {!Atatus} A self reference. 119 | */ 120 | uninstall(): Atatus; 121 | 122 | /** 123 | * Manually capture an exception and send it over to Atatus 124 | * 125 | * @param {error} ex An exception to be logged 126 | * @param {object} customData Custom meta data for this error [optional] 127 | * @param {array} tags List of tags for this error [optional] 128 | * @return {!Atatus} A self reference. 129 | */ 130 | notify(ex: Error, customData?: Object, tags?: string[]): Atatus; 131 | 132 | /** 133 | * Set a user to be sent along with the payload. 134 | * 135 | * @param {object} user An object representing user data [optional] 136 | * @return {!Atatus} A self reference. 137 | */ 138 | setUser(id: string, email?: string, name?: string): Atatus; 139 | 140 | /** 141 | * Clear the user context, removing the user data that would be sent to Atatus. 142 | * 143 | * @return {!Atatus} A self reference. 144 | */ 145 | resetUser(): Atatus; 146 | 147 | /** 148 | * Enable hash routes or path 149 | * 150 | * @param {boolean} hashRoutes Value indicates whether to convert hash routes into clean URL. 151 | * @return {!Atatus} A self reference. 152 | */ 153 | setHashRoutes(hashRoutes: boolean): Atatus; 154 | 155 | /** 156 | * Enable offline 157 | * 158 | * @param {boolean} offline Value indicates whether to enable offline data collection or not. 159 | * @return {!Atatus} A self reference. 160 | */ 161 | enableOffline(offline: boolean): Atatus; 162 | 163 | /** 164 | * Set release version of application 165 | * 166 | * @param {string} version Application version number 167 | * @return {!Atatus} A self reference. 168 | */ 169 | setVersion(version: string): Atatus; 170 | 171 | /** 172 | * Set meta data which helps you to debug the error 173 | * 174 | * @param {Object} customData Object contains custom details to be send with error. 175 | * @return {!Atatus} A self reference. 176 | */ 177 | setCustomData(customData: Object): Atatus; 178 | 179 | /** 180 | * Set tags by which you can filter the error and performance data 181 | * 182 | * @param {string[]} tags List of tags 183 | * @return {!Atatus} A self reference. 184 | */ 185 | setTags(tags: string[]): Atatus; 186 | 187 | /** 188 | * Set ignored urls 189 | * 190 | * @param {(RegExp | string)[]} ignoreUrls List of ignored urls. 191 | * @return {!Atatus} A self reference. 192 | */ 193 | setIgnoreUrls(ignoreUrls: (RegExp | string)[]): Atatus; 194 | 195 | /** 196 | * Get list of ignored urls 197 | * 198 | * @return {(RegExp | string)[]} 199 | */ 200 | getIgnoreUrls(): (RegExp | string)[]; 201 | 202 | /** 203 | * Set white-list urls 204 | * 205 | * @param {(RegExp | string)[]} whitelistUrls List of whitelist urls. 206 | * @return {!Atatus} A self reference. 207 | */ 208 | setWhitelistUrls(whitelistUrls: (RegExp | string)[]): Atatus; 209 | 210 | /** 211 | * Get list of white-list urls 212 | * 213 | * @return {(RegExp | string)[]} 214 | */ 215 | getWhitelistUrls(): (RegExp | string)[]; 216 | 217 | /** 218 | * Set allowed domains 219 | * 220 | * @param {(RegExp | string)[]} allowedDomains List of allowed domains. 221 | * @return {!Atatus} A self reference. 222 | */ 223 | setAllowedDomains(allowedDomains: (RegExp | string)[]): Atatus; 224 | 225 | /** 226 | * Get list of allowed domains 227 | * 228 | * @return {(RegExp | string)[]} 229 | */ 230 | getAllowedDomains(): (RegExp | string)[]; 231 | 232 | /** 233 | * Set the endpoint where data should be sent 234 | * 235 | * @param {string} apiEndpoint The endpoint where all data has to be sent. 236 | * @return {!Atatus} A self reference. 237 | */ 238 | setAPIEndpoint(apiEndpoint: string): Atatus; 239 | 240 | /** 241 | * Get the API Endpoint 242 | * 243 | * @return {string} 244 | */ 245 | getAPIEndpoint(): string; 246 | 247 | /** 248 | * Log a breadcrumb 249 | * 250 | * @param {any} value Value of the breadcrumb. 251 | * @param {string} type Type of the breadcrumb can be info, error, warn. 252 | * @return {!Atatus} A self reference. 253 | */ 254 | leaveBreadcrumb(value: any, type?: string): Atatus; 255 | 256 | /** 257 | * Specify a function that allows mutation of the data payload right before being sent to Atatus. 258 | * 259 | * @param {any} data Payload of the error or performance. 260 | * @return {!Atatus} A self reference. 261 | */ 262 | onBeforeSend(data: any): Atatus; 263 | 264 | /** 265 | * Specify a callback function that allows you to apply your own filters to determine if the message should be sent to Atatus. 266 | * 267 | * @param {any} data Payload of the error. 268 | * @return {!Atatus} A self reference. 269 | */ 270 | onBeforeErrorSend(data: any): Atatus; 271 | 272 | /** 273 | * Specify a callback function that allows to specify the custom grouping key of the error 274 | * 275 | * @param {any} data Payload of the error. 276 | * @return {!Atatus} A self reference. 277 | */ 278 | setGroupingKeyCallback(data: any): Atatus; 279 | 280 | /** 281 | * End the session 282 | * 283 | * @return {!Atatus} A self reference. 284 | */ 285 | endSession(): Atatus; 286 | 287 | /** 288 | * Begin the transaction 289 | * 290 | * @param {String} txnName - Transaction name 291 | */ 292 | beginTransaction(txnName: string): void; 293 | 294 | /** 295 | * End the transaction successfully 296 | * 297 | * @param {String} txnName - Transaction name 298 | */ 299 | endTransaction(txnName: string): void; 300 | 301 | /** 302 | * Fail the transaction 303 | * 304 | * @param {String} txnName - Transaction name 305 | */ 306 | failTransaction(txnName: string): void; 307 | 308 | /** 309 | * Cancel the transaction 310 | * 311 | * @param {String} txnName - Transaction name 312 | */ 313 | cancelTransaction(txnName: string): void; 314 | 315 | /** 316 | * Record the transaction with the given duration 317 | * 318 | * @param {String} txnName - Transaction name 319 | * @param {Number} duration - Time duration in milliseconds 320 | */ 321 | recordTransaction(txnName: string, duration: number, success?: boolean): void; 322 | 323 | } 324 | 325 | interface Window { 326 | _atatusConfig: AtatusOptions 327 | } 328 | 329 | declare var atatus: Atatus; 330 | declare module "atatus-js" { 331 | export = atatus; 332 | } 333 | -------------------------------------------------------------------------------- /atatus.min.js: -------------------------------------------------------------------------------- 1 | /*! AtatusJs - v4.6.4 - 2024-11-19 2 | * Copyright (c) 2024 Atatus */ 3 | !function(){"undefined"!=typeof window&&(!function(a){function b(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function c(a){return"undefined"==typeof a}if(a){var d={},e=a.TraceKit,f=[].slice,g="?";d.noConflict=function(){return a.TraceKit=e,d},d.wrap=function(a){function b(){try{return a.apply(this,arguments)}catch(b){throw d.report(b),b}}try{if("function"!=typeof a||!a.apply)return a}catch(c){return a}return b},d.report=function(){function c(a){h(),m.push(a)}function e(a){for(var b=m.length-1;b>=0;--b)m[b]===a&&m.splice(b,1)}function f(a,c,e){var f=null;if(!c||d.collectWindowErrors){for(var g in m)if(b(m,g))try{m[g](a,c,e)}catch(h){f=h}if(f)throw f}}function g(a,b,c,e,g){var h=null;if(o)d.computeStackTrace.augmentStackTraceWithInitialElement(o,b,c,a),i();else if(g)h=d.computeStackTrace(g),f(h,!0,g);else{var j={url:b,line:c,column:e};j.func=d.computeStackTrace.guessFunctionName(j.url,j.line),j.context=d.computeStackTrace.gatherContext(j.url,j.line),h={mode:"onerror",message:a,stack:[j]},f(h,!0,null)}return k?k.apply(this,arguments):!1}function h(){l!==!0&&(k=a.onerror,a.onerror=g,l=!0)}function i(){var a=o,b=n;o=null,n=null,f(a,!1,b)}function j(b){if(o){if(n===b)return;i()}var c=d.computeStackTrace(b);throw o=c,n=b,a.setTimeout(function(){n===b&&i()},c.incomplete?2e3:0),b}var k,l,m=[],n=null,o=null;return j.subscribe=c,j.unsubscribe=e,j}(),d.computeStackTrace=function(){function e(a){return"string"!=typeof a?[]:""}function f(c){if("string"!=typeof c)return[];if(!b(w,c)){var d="",f="";try{f=a.document.domain}catch(g){}var h=/(.*)\:\/\/([^:\/]+)([:\d]*)\/{0,1}([\s\S]*)/.exec(c);h&&h[2]===f&&(d=e(c)),w[c]=d?d.split("\n"):[]}return w[c]}function h(a,b){var d,e=/function ([^(]*)\(([^)]*)\)/,h=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,i="",j=10,k=f(a);if(!k.length)return g;for(var l=0;j>l;++l)if(i=k[b-l]+i,!c(i)){if(d=h.exec(i))return d[1];if(d=e.exec(i))return d[1]}return g}function i(a,b){var e=f(a);if(!e.length)return null;var g=[],h=Math.floor(d.linesOfContext/2),i=h+d.linesOfContext%2,j=Math.max(0,b-h-1),k=Math.min(e.length,b+i-1);b-=1;for(var l=j;k>l;++l)c(e[l])||g.push(e[l]);return g.length>0?g:null}function j(a){return a.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,"\\$&")}function k(a){return j(a).replace("<","(?:<|<)").replace(">","(?:>|>)").replace("&","(?:&|&)").replace('"','(?:"|")').replace(/\s+/g,"\\s+")}function l(a,b){for(var c,d,e=0,g=b.length;g>e;++e)if((c=f(b[e])).length&&(c=c.join("\n"),d=a.exec(c)))return{url:b[e],line:c.substring(0,d.index).split("\n").length,column:d.index-c.lastIndexOf("\n",d.index)-1};return null}function m(a,b,c){var d,e=f(b),g=new RegExp("\\b"+j(a)+"\\b");return c-=1,e&&e.length>c&&(d=g.exec(e[c]))?d.index:null}function n(b){if(!c(a&&a.document)){for(var d,e,f,g,h=[a.location.href],i=a.document.getElementsByTagName("script"),m=""+b,n=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,o=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,p=0;po;++o){if(b=e.exec(k[o])){var q=b[2]&&-1!==b[2].indexOf("native");d={url:q?null:b[2],func:b[1]||g,args:q?[b[2]]:[],line:b[3]?+b[3]:null,column:b[4]?+b[4]:null}}else if(b=j.exec(k[o]))d={url:b[2],func:b[1]||g,args:[],line:+b[3],column:b[4]?+b[4]:null};else{if(!(b=f.exec(k[o])))continue;d={url:b[3],func:b[1]||g,args:b[2]?b[2].split(","):[],line:b[4]?+b[4]:null,column:b[5]?+b[5]:null}}!d.func&&d.line&&(d.func=h(d.url,d.line)),d.line&&(d.context=i(d.url,d.line)),l.push(d)}return l.length?(l[0]&&l[0].line&&!l[0].column&&n?l[0].column=m(n[1],l[0].url,l[0].line):l[0].column||c(a.columnNumber)||(l[0].column=a.columnNumber+1),{mode:"stack",name:a.name,message:a.message,stack:l}):null}function p(a){var b=a.stacktrace;if(b){for(var c,d=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,e=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,f=b.split("\n"),g=[],j=0;j=0&&(s.line=t+v.substring(0,w).split("\n").length)}}}else if(e=m.exec(d[r])){var x=a.location.href.replace(/#.*$/,""),y=new RegExp(k(d[r+1])),z=l(y,[x]);s={url:x,func:"",args:[],line:z?z.line:e[1],column:null}}if(s){s.func||(s.func=h(s.url,s.line));var A=i(s.url,s.line),B=A?A[Math.floor(A.length/2)]:null;s.context=A&&B.replace(/^\s*/,"")===d[r+1].replace(/^\s*/,"")?A:[d[r+1]],n.push(s)}}return n.length?{mode:"multiline",name:c.name,message:d[0],stack:n}:null}function r(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){a.incomplete=!1,e.func||(e.func=h(e.url,e.line)),e.context||(e.context=i(e.url,e.line));var f=/ '([^']+)' /.exec(d);if(f&&(e.column=m(f[1],e.url,e.line)),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,a.stack[0].context=e.context,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function s(a,b){for(var c,e,f,i=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,j=[],k={},l=!1,o=s.caller;o&&!l;o=o.caller)if(o!==t&&o!==d.report){if(e={url:null,func:g,args:[],line:null,column:null},o.name?e.func=o.name:(c=i.exec(o.toString()))&&(e.func=c[1]),"undefined"==typeof e.func)try{e.func=c.input.substring(0,c.input.indexOf("{"))}catch(p){}if(f=n(o)){e.url=f.url,e.line=f.line,e.func===g&&(e.func=h(e.url,e.line));var q=/ '([^']+)' /.exec(a.message||a.description);q&&(e.column=m(q[1],f.url,f.line))}k[""+o]?l=!0:k[""+o]=!0,j.push(e)}b&&j.splice(0,b);var u={mode:"callers",name:a.name,message:a.message,stack:j};return r(u,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),u}function t(a,b){var c=null;b=null==b?0:+b;try{if(c=p(a))return c}catch(d){if(v)throw d}try{if(c=o(a))return c}catch(d){if(v)throw d}try{if(c=q(a))return c}catch(d){if(v)throw d}try{if(c=s(a,b+1))return c}catch(d){if(v)throw d}return{mode:"failed"}}function u(a){a=(null==a?0:+a)+1;try{throw new Error}catch(b){return t(b,a+1)}}var v=!1,w={};return t.augmentStackTraceWithInitialElement=r,t.guessFunctionName=h,t.gatherContext=i,t.ofCaller=u,t.getSource=f,t}(),d.extendToAsynchronousCallbacks=function(){var b=function(b){var c=a[b];a[b]=function(){var a=f.call(arguments),b=a[0];return"function"==typeof b&&(a[0]=d.wrap(b)),c.apply?c.apply(this,a):c(a[0],a[1])}};b("setTimeout"),b("setInterval")},d.remoteFetching||(d.remoteFetching=!0),d.collectWindowErrors||(d.collectWindowErrors=!0),(!d.linesOfContext||d.linesOfContext<1)&&(d.linesOfContext=11),a.TraceKit=d}}("undefined"!=typeof window?window:global),function(a,b){"use strict";if(a&&a.event&&a.event.add){var c=a.event.add;a.event.add=function(d,e,f,g,h){if("function"!=typeof f&&"function"!=typeof f.handler)return c.call(this,d,e,f,g,h);var i;return f.handler?(i=f.handler,f.handler=b.wrap(f.handler)):(i=f,f=b.wrap(f)),f.guid=i.guid?i.guid:i.guid=a.guid++,c.call(this,d,e,f,g,h)};var d=a.fn.ready;a.fn.ready=function(a){return d.call(this,b.wrap(a))};var e=a.ajax;a.ajax=function(c,d){"object"==typeof c&&(d=c,c=void 0),d=d||{};for(var f,g=["complete","error","success"];f=g.pop();)a.isFunction(d[f])&&(d[f]=b.wrap(d[f]));try{return c?e.call(this,c,d):e.call(this,d)}catch(h){throw b.report(h),h}}}}(window.jQuery,window.TraceKit),window.webVitals=function(a){"use strict";var b,c,d,e,f,g=-1,h=function(a){addEventListener("pageshow",function(b){b.persisted&&(g=b.timeStamp,a(b))},!0)},i=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},j=function(){var a=i();return a&&a.activationStart||0},k=function(a,b){var c=i(),d="navigate";return g>=0?d="back-forward-cache":c&&(document.prerendering||j()>0?d="prerender":document.wasDiscarded?d="restore":c.type&&(d=c.type.replace(/_/g,"-"))),{name:a,value:void 0===b?-1:b,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:d}},l=function(a,b,c){try{if(PerformanceObserver.supportedEntryTypes.includes(a)){var d=new PerformanceObserver(function(a){Promise.resolve().then(function(){b(a.getEntries())})});return d.observe(Object.assign({type:a,buffered:!0},c||{})),d}}catch(a){}},m=function(a,b,c,d){var e,f;return function(g){b.value>=0&&(g||d)&&((f=b.value-(e||0))||void 0===e)&&(e=b.value,b.delta=f,b.rating=function(a,b){return a>b[1]?"poor":a>b[0]?"needs-improvement":"good"}(b.value,c),a(b))}},n=function(a){requestAnimationFrame(function(){return requestAnimationFrame(function(){return a()})})},o=function(a){var b=function(b){"pagehide"!==b.type&&"hidden"!==document.visibilityState||a(b)};addEventListener("visibilitychange",b,!0),addEventListener("pagehide",b,!0)},p=function(a){var b=!1;return function(c){b||(a(c),b=!0)}},q=-1,r=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},s=function(a){"hidden"===document.visibilityState&&q>-1&&(q="visibilitychange"===a.type?a.timeStamp:0,u())},t=function(){addEventListener("visibilitychange",s,!0),addEventListener("prerenderingchange",s,!0)},u=function(){removeEventListener("visibilitychange",s,!0),removeEventListener("prerenderingchange",s,!0)},v=function(){return 0>q&&(q=r(),t(),h(function(){setTimeout(function(){q=r(),t()},0)})),{get firstHiddenTime(){return q}}},w=function(a){document.prerendering?addEventListener("prerenderingchange",function(){return a()},!0):a()},x=[1800,3e3],y=function(a,b){b=b||{},w(function(){var c,d=v(),e=k("FCP"),f=l("paint",function(a){a.forEach(function(a){"first-contentful-paint"===a.name&&(f.disconnect(),a.startTimed.value&&(d.value=e,d.entries=f,c())},i=l("layout-shift",g);i&&(c=m(a,d,z,b.reportAllChanges),o(function(){g(i.takeRecords()),c(!0)}),h(function(){e=0,d=k("CLS",0),c=m(a,d,z,b.reportAllChanges),n(function(){return c()})}),setTimeout(c,0))}))},B={passive:!0,capture:!0},C=new Date,D=function(a,e){b||(b=e,c=a,d=new Date,G(removeEventListener),E())},E=function(){if(c>=0&&d-C>c){var a={entryType:"first-input",name:b.type,target:b.target,cancelable:b.cancelable,startTime:b.timeStamp,processingStart:b.timeStamp+c};e.forEach(function(b){b(a)}),e=[]}},F=function(a){if(a.cancelable){var b=(a.timeStamp>1e12?new Date:performance.now())-a.timeStamp;"pointerdown"==a.type?function(a,b){var c=function(){D(a,b),e()},d=function(){e()},e=function(){removeEventListener("pointerup",c,B),removeEventListener("pointercancel",d,B)};addEventListener("pointerup",c,B),addEventListener("pointercancel",d,B)}(b,a):D(b,a)}},G=function(a){["mousedown","keydown","touchstart","pointerdown"].forEach(function(b){return a(b,F,B)})},H=[100,300],I=function(a,d){d=d||{},w(function(){var f,g=v(),i=k("FID"),j=function(a){a.startTimeb.latency){if(c)c.entries.push(a),c.latency=Math.max(c.latency,a.duration);else{var d={id:a.interactionId,latency:a.duration,entries:[a]};T[d.id]=d,S.push(d)}S.sort(function(a,b){return b.latency-a.latency}),S.splice(10).forEach(function(a){delete T[a.id]})}},V=function(a,b){b=b||{},w(function(){var c;O();var d,e=k("INP"),f=function(a){a.forEach(function(a){a.interactionId&&U(a),"first-input"===a.entryType&&!S.some(function(b){return b.entries.some(function(b){return a.duration===b.duration&&a.startTime===b.startTime})})&&U(a)});var b,c=(b=Math.min(S.length-1,Math.floor(R()/50)),S[b]);c&&c.latency!==e.value&&(e.value=c.latency,e.entries=c.entries,d())},g=l("event",f,{durationThreshold:null!==(c=b.durationThreshold)&&void 0!==c?c:40});d=m(a,e,P,b.reportAllChanges),g&&("interactionId"in PerformanceEventTiming.prototype&&g.observe({type:"first-input",buffered:!0}),o(function(){f(g.takeRecords()),e.value<0&&R()>0&&(e.value=0,e.entries=[]),d(!0)}),h(function(){S=[],Q=N(),e=k("INP"),d=m(a,e,P,b.reportAllChanges)}))})},W=[2500,4e3],X={},Y=function(a,b){b=b||{},w(function(){var c,d=v(),e=k("LCP"),f=function(a){var b=a[a.length-1];b&&b.startTime=f||f>performance.now())return;c.value=Math.max(f-j(),0),c.entries=[e],d(!0),h(function(){c=k("TTFB",0),(d=m(a,c,Z,b.reportAllChanges))(!0)})}})};return a.CLSThresholds=z,a.FCPThresholds=x,a.FIDThresholds=H,a.INPThresholds=P,a.LCPThresholds=W,a.TTFBThresholds=Z,a.getCLS=A,a.getFCP=y,a.getFID=I,a.getINP=V,a.getLCP=Y,a.getTTFB=_,a.onCLS=A,a.onFCP=y,a.onFID=I,a.onINP=V,a.onLCP=Y,a.onTTFB=_,Object.defineProperty(a,"__esModule",{value:!0}),a}({}),function(a,b,c,d){function e(){try{C=null,o()&&localStorage.removeItem(ka),D=null,Ha.createCookie(la,"",-1)}catch(a){Ha.log("Atatus Reset User",a)}}function f(a,b,c,d){if(a){C={},a&&(C.id=""+a),b&&(C.email=""+b),c&&(C.name=""+c),d&&(C.anonymous=d);try{o()&&localStorage.setItem(ka,JSON.stringify(C)),D=null,Ha.createCookie(la,"",-1)}catch(e){Ha.log("Atatus Set User: Invalid JSON object in LocalStorage",e)}}}function g(){try{var a;if(o()&&(a=localStorage.getItem(ka)),a)C=JSON.parse(a),D=null;else{var b,c=Ha.readCookie(la);c&&(b=Ha.readCookieElement(c,"id")),b&&"undefined"!==b?D=b:(D=Ha.uuid4(),Ha.createCookie(la,D))}}catch(d){Ha.log("Atatus Get User: Invalid JSON object in LocalStorage",d)}}function h(a){var b=a,c=a.split("//")[1];if(c){var d=c.indexOf("?"),e=c.toString().substring(0,d),f=e.split("/").slice(0,4).join("/"),g=e.substring(0,48);b=f.length";b&&(b instanceof Error||b.message)?La.notify(b):(b="object"==typeof b?"":"function"==typeof b?"":b,La.notify(new Error("UnhandledRejection: "+b)))}}function k(){"addEventListener"in a&&a.addEventListener("unhandledrejection",j)}function l(){"removeEventListener"in a&&a.removeEventListener("unhandledrejection",j)}function m(){return A&&""!==A?!0:(Ha.log("Atatus API key has not been configured, make sure you call atatus.config(yourApiKey)"),!1)}function n(){var c=b.documentElement,d=b.getElementsByTagName("body")[0],e=a.innerWidth||c.clientWidth||d.clientWidth,f=a.innerHeight||c.clientHeight||d.clientHeight;return{width:e,height:f}}function o(){try{return"localStorage"in a&&null!==a.localStorage}catch(b){return!1}}function p(a){try{if(o()&&localStorage.length<50){var b=(new Date).toJSON(),c="atatusjs="+b+"="+Ha.getRandomInt();"undefined"==typeof localStorage[c]&&(localStorage[c]=a)}else Ha.log("Atatus: Reached local storage limit.")}catch(d){Ha.log("Atatus: LocalStorage full, cannot save exception")}}function q(){try{if(o()&&localStorage.length>0)for(var a in localStorage)if("atatusjs="===a.substring(0,9)){try{var b=JSON.parse(localStorage[a]);"apikey"in b&&t(na,b)}catch(c){Ha.log("Atatus: Invalid JSON object in LocalStorage")}localStorage.removeItem(a)}}catch(c){Ha.log("Atatus sendSavedErrors: LocalStorage read failed!",c)}}function r(a,c){if(c=Ha.isObject(c)?c:{},!a||!a.stack||!a.stack.length)return void Ha.log("Atatus: Canceling send due to no stacktrace.");Ha.isObject(c.customData)||(c.customData=d),Ha.isArray(c.tags)||(c.tags=d);var e=c.customData&&c.customData.ajaxErrorMessage||a.message;if(e&&0===e.indexOf("Uncaught ")&&(e=a.message.substring(9)),e=e||c.status||"Script error.",N&&N.test(e))return void Ha.log("Atatus: canceling send due to Script error or ignored errors.");e=e.substr(0,xa);var f=[];a.stack&&a.stack.length&&Ha.forEach(a.stack,function(a,b){Ha.endsWith(b.url,"/atatus.js")||Ha.endsWith(b.url,"/atatus-spa.js")||Ha.endsWith(b.url,"/atatus-spa.min.js")||Ha.endsWith(b.url,"/atatus.min.js")||f.push({ln:parseInt(b.line||0),cn:parseInt(b.column||0),f:b.url||"anonymous",m:b.func||"[anonymous]"})});var g=[a.name,e,JSON.stringify(f)].join("|");if(g===O){if(ia++,ia>=ja)return void Ha.log("Atatus: canceling send due to duplicate errors")}else O=g,ia=0;var h=c.customData;try{JSON.stringify(h)}catch(i){var j="Cannot add custom data; may contain circular reference";h={error:j},Ha.log("Atatus: "+j)}var k=Ka.getAllEvents();Ia.clear();var l={"class":a.name,url:b.location.href,message:e,name:e,backTraces:f,breadCrumbs:k,customData:h||null,tags:c.tags,ts:(new Date).getTime()};if("function"==typeof Q&&(l.groupingKey=Q(l)),"function"==typeof S){var m=S(l);m&&(delete l.name,s(l))}else delete l.name,s(l)}function s(a){return G?void Ha.log("Error Tracking is disabled."):void t(na,{customData:B||null,errors:[a]})}function t(c,d){if(m()){if(!La._isAllowedUrl(location.href))return void Ha.log("Atatus: canceling send due to not an allowed domain/url.");if(!d.ts){var e=a.screen||n();d.ts=(new Date).getTime(),d.apikey=A,d.request={url:b.location.href,ua:navigator.userAgent,w:e.width,h:e.height},d.connection=Fa,d.tags=d.tags||$,d.user=C&&C.id?C:null,d.aid=D||null,d.sid=La.sessionId||"",d.v=E||"",d._v=La.VERSION||X||""}if(R){var f=R(d);if(!f)return void Ha.log("Atatus: canceling send due to false from beforeSend callback.")}if(P&&P(d),Ha.log("Sending data to Atatus Receiver:",d),c===oa)w(c,d);else if(c===qa){if(!d.sid)return void Ha.log("Atatus: canceling session send due to empty session id.");if(Ea.session>=Aa)return void Ha.log("Atatus: Canceling session send. Reached maximum number of requests!");Ea.session+=1,y(c,d)}else if(c===ra){if(Ea.spa>=Ca)return void Ha.log("Atatus: Canceling SPA send. Reached maximum number of requests!");Ea.spa+=1,Ea.ajax=0,y(c,d)}else if(c===ta){if(Ea.webvitals>=Da)return void Ha.log("Atatus: Canceling web vitals send. Reached maximum number of requests!");Ea.webvitals+=1,z(c,d)}else{if(c===na){if(Ea.error>=ya)return void Ha.log("Atatus: Canceling error send. Reached maximum number of requests!");Ea.error+=1}else if(c===pa){if(Ea.ajax>=za)return void Ha.log("Atatus: Canceling AJAX send. Reached maximum number of requests!");Ea.ajax+=1}else if(c===sa){if(Ea.txn>=Ba)return void Ha.log("Atatus: Canceling transaction send. Reached maximum number of requests!");Ea.txn+=1}v(c,d)}}}function u(a){return"apikey="+a.apikey+"&v="+a._v}function v(a,b){var c=ma+a+"?data="+encodeURIComponent(JSON.stringify(b))+"&"+u(b);if(c.length>ua)return void Ha.log("Atatus: Canceling request send due to large payload size.");var d=new Image;d.crossOrigin="anonymous",d.onload=function(){q()},d.onerror=d.onabort=function(){ea&&a===na&&p(JSON.stringify(b))},d.src=c}function w(a,c){var d=b.createElement("script"),e=ma+a+"?data="+encodeURIComponent(JSON.stringify(c))+"&callback=atatus._setFeatures&"+u(c);d.type="text/javascript",d.src=e;var f=b.getElementsByTagName("script")[0];f.parentNode.insertBefore(d,f)}function x(b,c){var d;return d=new a.XMLHttpRequest,"withCredentials"in d?d.open(b,c,!0):a.XDomainRequest&&(c=Ha.getTargetUrl(c),d=new a.XDomainRequest,d.open(b,c)),d.timeout=1e4,d}function y(b,c){var d=ma+b+"?"+u(c),e=x("POST",d);return e?("function"==typeof e.setRequestHeader&&e.setRequestHeader("Content-Type","application/json;charset=UTF-8"),"withCredentials"in e?(e.onreadystatechange=function(){4!==e.readyState},e.onload=function(){Ha.log("Sent data to Atatus. Status - "+e.status)}):a.XDomainRequest&&(e.ontimeout=function(){},e.onload=function(){Ha.log("Sent data to Atatus. Status - "+e.status)}),e.onerror=function(){Ha.log("Failed to send to Atatus. Status - "+e.status)},void e.send(JSON.stringify(c))):void Ha.log("XHR is not supported!")}function z(b,c){var d="[object Navigator]"===Object.prototype.toString.call(a&&a.navigator),e=d&&"function"==typeof a.navigator.sendBeacon;if(e){var f=a.navigator.sendBeacon.bind(a.navigator),g=ma+b;return f(g,JSON.stringify(c))}v(b,c)}var A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X="4.6.4",Y=a.TraceKit.noConflict(),Z=a.atatus,$=[],_=!1,aa=[],ba=[],ca=[],da=!1,ea=!1,fa=!1,ga=!0,ha=!1,ia=0,ja=0,ka="atatus-user",la="atatus-aid",ma="https://bm-rx.atatus.com",na="/track/browser/errors",oa="/track/browser/perf/pageload",pa="/track/browser/perf/ajax",qa="/track/browser/perf/session",ra="/track/browser/perf/spa",sa="/track/browser/perf/txn",ta="/track/browser/perf/webvitals",ua=4e4,va=10,wa=500,xa=1e3,ya=20,za=5,Aa=10,Ba=100,Ca=100,Da=3,Ea={error:0,ajax:0,session:0,txn:0,spa:0,webvitals:0},Fa=null,Ga=["google-analytics.com","mixpanel.com","bam.nr-data.net","br-rx.atatus.com","bm-rx.atatus.com","segment.io","hotjar.io","hotjar.com","amplitude.com","fullstory.com","autopilothq.com","smartlook.com","charmerly.com","googleapis.com","logrocket.io","taboola.com","sentry.io","doubleclick.net","logentries.com","rb-collector.com","js.hs-banner.com","clarity.ms","lr-ingest.io","collector.replaybird.com","rum.browser-intake-datadoghq.com"];c&&(W=c(b));var Ha={isBoolean:function(a){return"undefined"!=typeof a&&"boolean"==typeof a},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isFunction:function(a){return"function"==typeof a},isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)},isObject:function(a){return"[object Object]"===Object.prototype.toString.call(a)},serialize:function(a){if(!a)return"";if(Ha.isString(a)||Ha.isNumber(a)||Ha.isBoolean(a)||Ha.isFunction(a))return""+a;if("object"==typeof a)try{return JSON.stringify(a)}catch(b){return"Unserializable Object"}return""},endsWith:function(a,b){return a&&b?-1!==a.indexOf(b,a.length-b.length):!1},joinRegExp:function(a){if(0===a.length)return null;for(var b,c=[],d=0,e=a.length;e>d;d++)b=a[d],Ha.isString(b)?c.push(b.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):b&&b.source&&c.push(b.source);return new RegExp(c.join("|"),"i")},getTargetUrl:function(b){return a.XDomainRequest&&da&&(b=b.slice(6)),b},now:function(){return(new Date).getTime()},pad:function(a){return a=String(a),1===a.length&&(a="0"+a),a},merge:function(a,b){var c,d={};for(c in a)d[c]=a[c];for(c in b)d[c]=b[c];return d},mergeArray:function(a,b){return null!=b?a.concat(b):a},forEach:function(a,b){for(var c=0;c=d},uuid4:function(){return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"===a?b:3&b|8;return c.toString(16)})},addEventListener:function(b,c,d){return"undefined"!=typeof a.attachEvent?a.attachEvent("on"+b,c):a.addEventListener?a.addEventListener(b,c,d):void 0},arrayFromObject:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(a[c]);return b},createCookie:function(a,c,d,e,f){try{var g,h;if(d){var i=new Date;i.setTime(i.getTime()+60*d*60*1e3),g="; expires="+i.toGMTString()}else g="";var j=e?"; SameSite=Lax; secure":"; SameSite=Lax",k=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,l="";if(f){var m=b.location.hostname.match(k),n=m?m[0]:"";l=n?"; domain=."+n:""}return h=(new Date).toISOString(),b.cookie=a+"=id|"+c+"×tamp|"+h+g+"; path=/"+l+j,h}catch(o){Ha.log("Creating cookie failed.",o)}},clearCookie:function(a){this.createCookie(a,"",-1)},readCookieElement:function(a,b){var c=a.split(/[|&]/);return"id"===b?c[1]:"timestamp"===b?c[3]:void 0},readCookie:function(a){try{for(var c=a+"=",d=b.cookie.split(";"),e=0;eb&&(this.eventObject[a]=c.slice(c.length-b))}},Ja={attach:function(b,c,d,e,f){b=b||a.console||{};for(var g=f||["log","debug","info","warn","error"],h=g.pop(),i=function(a,b,d){c&&Ia.add("timeline",{ts:Ha.now(),c:"console",l:a,m:Ha.serialize(b)}),"error"===a&&e&&La.notify(new Error(b),d)};h;)this.wrapConsoleMethod(b,h,d,i),h=g.pop()},wrapConsoleMethod:function(a,b,c,d){var e=a[b],f=a;b in a&&(a[b]=function(){var a=[].slice.call(arguments),g=""+a.join(" "),h={level:b,logger:"console"};d&&d(b,g,h),e&&c&&Function.prototype.apply.call(e,f,a)})}},Ka={attach:function(){var a=Ha.bind(this.onDocumentClicked,this),c=Ha.bind(this.onInputChanged,this);b.addEventListener?(b.addEventListener("click",a,!0),b.addEventListener("blur",c,!0)):b.attachEvent&&(b.attachEvent("onclick",a),b.attachEvent("onfocusout",c))},writeUserEvent:function(a,b,c,d){"password"===this.getElementType(a)&&(c=void 0),Ia.add("timeline",{ts:Ha.now(),a:b,e:this.getOuterHTML(a),v:this.getValueKind(c,d)})},onDocumentClicked:function(a){var b=this.getElementFromEvent(a);b&&b.tagName&&(this.isTarget(b,"a")||this.isTarget(b,"button")||this.isTarget(b,"input",["button","submit"])?this.writeUserEvent(b,"click"):this.isTarget(b,"input",["checkbox","radio"])&&this.writeUserEvent(b,"check",b.value,b.checked))},onInputChanged:function(a){var b=this.getElementFromEvent(a);b&&b.tagName&&(this.isTarget(b,"textarea")?this.writeUserEvent(b,"input",b.value):this.isTarget(b,"select")&&b.options&&b.options.length?this.onSelectInputChanged(b):this.isTarget(b,"input")&&!this.isTarget(b,"input",["button","submit","hidden","checkbox","radio"])&&this.writeUserEvent(b,"input",b.value))},onSelectInputChanged:function(a){if(a.multiple){for(var b=0;bd;d++){var f=c[d].name;"value"!==f.toLowerCase()&&(b+=" "+f+'="'+c[d].value+'"')}return b+=" >"},getValueKind:function(a,b){return null==a?null:{length:a.length,checked:b,pattern:this.matchInputPattern(a)}},matchInputPattern:function(a){return""===a?"empty":/^[a-z0-9!#$%&'*+=?\^_`{|}~\-]+(?:\.[a-z0-9!#$%&'*+=?\^_`{|}~\-]+)*@(?:[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?$/.test(a)?"email":/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/.test(a)||/^(\d{4}[\/\-](0?[1-9]|1[012])[\/\-]0?[1-9]|[12][0-9]|3[01])$/.test(a)?"date":/^(?:(?:\+?1\s*(?:[.\-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.\-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.\-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/.test(a)?"phone":/^\s*$/.test(a)?"whitespace":/^\d*$/.test(a)?"numeric":"character"; 4 | 5 | },getAllEvents:function(){return Ia.all("timeline")}},La={VERSION:X,paintPerformance:{},noConflict:function(){return a.atatus=Z,La},isConfigured:function(){return!!A},config:function(b,c){c=c||{},A=b,Y.remoteFetching=!1,N=[],La.setCustomData(c.customData),La.setTags(c.tags),_=!!c.debugMode,fa=!!c.reportAjaxErrors,ga=c.reportUnhandledRejections===d?!0:!!c.reportUnhandledRejections,ha=!!c.allowChromeExtension,F=!!c.disableBreadcrumbs,G=!!c.disableErrorTracking,L=!!c.disableRUM,I=!!c.disableAjaxMonitoring,J=c.disableSession===d?!1:c.disableSession,K=c.disableSPA===d?!1:c.disableSPA,V=c.urlMaxLength,c.maxDuplicateErrors&&(ja=c.maxDuplicateErrors>10?10:c.maxDuplicateErrors||0),da=Ha.canAllowInsecureSubmissions(),La.setIgnoreUrls(c.ignoreUrls),La.setWhitelistUrls(c.whitelistUrls),La.setAllowedDomains(c.allowedDomains),La.setVersion(c.version),La.enableOffline(c.enableOffline||c.offline),La.onBeforeSend(c.beforeSend),La.onBeforeErrorSend(c.beforeErrorSend),La.onTransformRouteUrl(c.transformRouteUrl),La.setGroupingKeyCallback(c.groupingKeyCallback),c.ignoreErrors&&Ha.isArray(c.ignoreErrors)&&(N=c.ignoreErrors),N.push(/^Script error\.?$/),N.push(/^Javascript error: Script error\.? on line 0$/),N=Ha.joinRegExp(N),q(),M={enabled:!1,timeline:!0,display:!0,error:!0,levels:null},Ha.isBoolean(c.console)&&(M.enabled=c.console),Ha.isBoolean(c.consoleTimeline)&&(M.timeline=c.consoleTimeline),Ha.isBoolean(c.consoleDisplay)&&(M.display=c.consoleDisplay),Ha.isBoolean(c.consoleErrorNotify)&&(M.error=c.consoleErrorNotify),Ha.isArray(c.consoleTimelineLevels)&&(M.levels=c.consoleTimelineLevels),M.enabled&&"console"in a&&a.console.log&&Ja.attach(a.console,M.timeline,M.display,M.error,M.levels),La.setHashRoutes(c.hashRoutes);var e=a.navigator.connection||a.navigator.mozConnection||a.navigator.webkitConnection;return e&&(Fa={},Fa.dlk=e.downlink,Fa.eft=e.effectiveType,Fa.rtt=e.rtt,Fa.type=e.type),La},install:function(){if(!m())return La;if(!ha&&-1!==b.location.href.indexOf("chrome-extension://"))return La;if(g(),F||Ka.attach(),G||(Y.report.subscribe(r),Y.extendToAsynchronousCallbacks(),W&&fa&&W.ajaxError(i),ga&&k()),I||L||La.__attachAjaxHooks(),!J&&!L&&La.SessionTracking){var c=function(){U=new La.SessionTracking,U.attach()};a.addEventListener?a.addEventListener("load",c):a.attachEvent("onload",c)}return K||L||!La.spa||La.spa.init({logLevel:_?"debug":"warn",urlMaxLength:V}),La},uninstall:function(){return A=null,G||(Y.report.unsubscribe(r),W&&fa&&W.unbind("ajaxError",i),ga&&l()),La},setCustomData:function(a){return a?Ha.isObject(a)?B=a:Ha.log("Custom data must be an object."):B=null,La},setTags:function(a){return a?Ha.isArray(a)?$=a:Ha.log("Tags must be an array of string."):$=[],La},setHashRoutes:function(a){return a?(P=function(a){if(a&&a.request&&a.request.url&&(a.request.url=a.request.url.replace("/#/","/").replace("#/","/")),a&&a.data&&a.data[0]&&a.data[0].spans)for(var b=0;b0?a.nt:0,a.dp=a.dp>0?a.dp:0,a.pr=a.pr>0?a.pr:0,c.sendPerf(a))}function f(b,c){return"object"==typeof a.performance&&(!b||b&&typeof a.performance[b]===c)}function g(b){if(!f("getEntriesByName","function"))return b;var d=a.performance.getEntriesByName("first-paint");d.length>0&&d[0].startTime>0?b.fp=+d[0].startTime.toFixed(0):a.performance.timing&&a.performance.timing.msFirstPaint&&(b.fp=+(a.performance.timing.msFirstPaint-a.performance.timing.fetchStart).toFixed(0));var e=a.performance.getEntriesByName("first-contentful-paint");return e.length>0&&e[0].startTime>0&&(b.fcp=+e[0].startTime.toFixed(0)),c.paintPerformance={fp:b.fp,fcp:b.fcp},b}function h(){var b=a.performance||a.mozPerformance||a.msPerformance||a.webkitPerformance,c=b.timing;if(0===c.loadEventEnd)return!1;clearInterval(l),l=null;var d=c.navigationStart;0>=d&&(d=c.fetchStart);var f={};for(var h in m)f[m[h]]=-1,h in c&&(c[h]<=0||(f[m[h]]=c[h]-d));var i={nt:f.rps-f.ns,dp:f.dce-f.rps,pr:f.le-f.dce,pl:f.le-f.ns,timing:f};try{g(i)}catch(j){}e(i)}function i(){if(!k||!k.bDone)return!1;clearInterval(l),l=!1;var a=k.getMeasures();if(null!=a&&null!=a.backend&&null!=a.frontend&&null!=a["page load time"]&&null!=a["total load time"]){var b=a.backend,c=a.backend+a.frontend,d={nt:b,dp:c-b,pr:a["total load time"]-c,fe:a["total load time"]-b,pl:a["total load time"]};e(d)}}var j=(new Date).getTime(),k=k||{};k.q=k.q||[],k.version="0.3",k.targetOrigin=b.location.protocol+"//"+b.location.hostname,k.bPostMessage=!1,k.beaconUrl=k.beaconUrl||"/images/beacon.gif",k.autorun=!1,k.init=function(){if(k.bDone=!1,k.bUnloaded=!1,k.marks={},k.measures={},k.starts={},k.findStartTime(),k.addEventListener("beforeunload",k.beforeUnload,!1),k.addEventListener("pagehide",k.beforeUnload,!1),k.addEventListener("unload",k.beforeUnload,!1),k.processQ(),"complete"===b.readyState){var c=a.performance||a.mozPerformance||a.msPerformance||a.webkitPerformance;c&&"undefined"!=typeof c.timing&&"undefined"!=typeof c.timing.loadEventEnd&&(k.mark("firstbyte",c.timing.responseStart),k.mark("onload",c.timing.loadEventEnd)),k.done()}else k.addEventListener("load",k.onload,!1)},k.processQ=function(){for(var a=k.q.length,b=0;a>b;b++){var c=k.q[b],d=c[0];"mark"===d?k.mark(c[1],c[2]):"measure"===d?k.measure(c[1],c[2],c[3]):"done"===d&&k.done(c[1])}},k.mark=function(b,c){return k.dprint("RUM_EPISODES.mark: "+b+", "+c),b?(k.marks[b]=parseInt(c||(new Date).getTime()),k.bPostMessage&&a.postMessage("RUM_EPISODES:mark:"+b+":"+c,k.targetOrigin),void("firstbyte"===b?k.measure("backend","starttime","firstbyte"):"onload"===b?(k.measure("frontend","firstbyte","onload"),k.measure("page load time","starttime","onload")):"done"===b&&k.measure("total load time","starttime","done"))):void k.dprint("Error: markName is undefined in RUM_EPISODES.mark.")},k.measure=function(b,c,d){if(k.dprint("RUM_EPISODES.measure: "+b+", "+c+", "+d),!b)return void k.dprint("Error: episodeName is undefined in RUM_EPISODES.measure.");var e;if("undefined"==typeof c)e="number"==typeof k.marks[b]?k.marks[b]:(new Date).getTime();else if("number"==typeof k.marks[c])e=k.marks[c];else{if("number"!=typeof c)return void k.dprint("Error: unexpected startNameOrTime in RUM_EPISODES.measure: "+c);e=c}var f;if("undefined"==typeof d)f=(new Date).getTime();else if("number"==typeof k.marks[d])f=k.marks[d];else{if("number"!=typeof d)return void k.dprint("Error: unexpected endNameOrTime in RUM_EPISODES.measure: "+d);f=d}k.starts[b]=parseInt(e),k.measures[b]=parseInt(f-e),k.bPostMessage&&a.postMessage("RUM_EPISODES:measure:"+b+":"+e+":"+f,k.targetOrigin)},k.done=function(b){k.bDone=!0,k.mark("done"),k.bPostMessage&&a.postMessage("RUM_EPISODES:done",k.targetOrigin),"function"==typeof b&&b()},k.getMarks=function(){return k.marks},k.getMeasures=function(){return k.measures},k.getStarts=function(){return k.starts},k.findStartTime=function(){var a=k.findStartWebTiming()||k.findStartCookie();a&&k.mark("starttime",a)},k.findStartWebTiming=function(){var b,c=a.performance||a.mozPerformance||a.msPerformance||a.webkitPerformance;return c&&"undefined"!=typeof c.timing&&"undefined"!=typeof c.timing.navigationStart&&(b=c.timing.navigationStart,k.dprint("RUM_EPISODES.findStartWebTiming: startTime = "+b)),b},k.findStartCookie=function(){try{for(var c=b.cookie.split(" "),e=0;e0&&(c.dls=a.domainLookupStart-a.fetchStart),a.domainLookupEnd&&a.domainLookupEnd>0&&(c.dle=a.domainLookupEnd-a.fetchStart),a.connectStart&&a.connectStart>0&&(c.cs=a.connectStart-a.fetchStart),a.connectEnd&&a.connectEnd>0&&(c.ce=a.connectEnd-a.fetchStart),a.responseStart&&a.responseStart>0&&(c.rps=a.responseStart-a.fetchStart),a.responseEnd&&a.responseEnd>0&&(c.rpe=a.responseEnd-a.fetchStart),a.domLoading&&a.domLoading>0&&(c.dl=a.domLoading-a.fetchStart),a.domInteractive&&a.domInteractive>0&&(c.di=a.domInteractive-a.fetchStart),a.domContentLoadedEventEnd&&a.domContentLoadedEventEnd>0&&(c.dce=a.domContentLoadedEventEnd-a.fetchStart),a.domComplete&&a.domComplete>0&&(c.dc=f(a.domComplete-a.fetchStart)),a.loadEventStart&&a.loadEventStart>0&&(c.ls=a.loadEventStart-a.fetchStart),a.loadEventEnd&&a.loadEventEnd>0&&(c.le=a.loadEventEnd-a.fetchStart),a.secureConnectionStart&&a.secureConnectionStart>0&&(c.scs=a.secureConnectionStart-a.connectStart-a.fetchStart,c.scs=c.scs>0?c.scs:0),c=g(c),b.paintPerformance&&b.paintPerformance.fp&&(c.fp=b.paintPerformance.fp,c.fcp=b.paintPerformance.fcp),c}function j(a,b){var c={du:f(a.duration),s:b+a.fetchStart};return a.domainLookupStart&&a.domainLookupStart>0&&(c.dls=a.domainLookupStart-a.fetchStart),a.domainLookupEnd&&a.domainLookupEnd>0&&(c.dle=a.domainLookupEnd-a.fetchStart),a.connectStart&&a.connectStart>0&&(c.cs=a.connectStart-a.fetchStart),a.connectEnd&&a.connectEnd>0&&(c.ce=a.connectEnd-a.fetchStart),a.responseStart&&a.responseStart>0&&(c.rps=a.responseStart-a.fetchStart),a.responseEnd&&a.responseEnd>0&&(c.rpe=a.responseEnd-a.fetchStart),a.secureConnectionStart&&a.secureConnectionStart>0&&(c.scs=a.secureConnectionStart-a.connectStart-a.fetchStart,c.scs=c.scs>0?c.scs:0),c=g(c)}function k(){var b=a.location.pathname,c=a.location.protocol+"//"+a.location.host+b;return c.length>800&&(c=c.substring(0,800)),{u:c,t:i(a.performance.timing),g:"p"}}function l(b,c,d){var e=a.location.protocol+"//"+a.location.host+b;return e.length>800&&(e=e.substring(0,800)),{u:e,t:h(c,d),g:"r"}}function m(b,c){var d=b.name.split("?")[0];return d.length>800&&(d=d.substring(0,800)),{u:d,t:j(b,c?0:a.performance.timing.navigationStart),g:"xmlhttprequest"===b.initiatorType||"fetch"===b.initiatorType?"x":"s",z:b.decodedBodySize||b.transferSize||0}}function n(b,d){if(a.performance!==c&&a.performance.getEntriesByType)try{for(var e=a.performance.getEntriesByType("resource"),f=q.offset;f0||0!==g.indexOf("about:blank")&&("j"!==g[0]||1!==g.indexOf("avascript:"))&&0!==g.indexOf("chrome-extension://")&&0!==g.indexOf("res://")&&0!==g.indexOf("file://")&&e[f].name&&b.push(m(e[f],d)))}q.offset=e.length}catch(h){}}function o(b,d,e,f){if(a.performance===c||a.performance.timing===c||a.performance.timing.fetchStart===c||isNaN(a.performance.timing.fetchStart))return null;var g=[{rs:[]}];if(d&&(e&&(f?g[0].p=k():g[0].rs.push(k())),n(g[0].rs)),b){q.pendingVirtualPage&&(g[0].r=q.pendingVirtualPage);var h=null==q.pendingVirtualPage;if(q.pendingVirtualPage=l(b,q.previousVirtualPageLoadTimestamp,q.initalStaticPageLoadTimestamp),!h&&g.length>0)return g}return g}var p=b._helper,q=this,r={};b.sessionId=null,this.cookieName="atatus-sid",this.virtualPage=null,this.heartBeatInterval=null,this.offset=0,this.atatusHost=b.getAPIEndpoint(),this.maxVirtualPageDuration=18e5;var s=3e5;this.existingTimestamp=null,this.stopSession=!1,this.sendSessionPayload=function(a){q.stopSession||b.sendSessionPerf(a)},this.sendSPAPayload=function(){},this.attach=function(){d(function(a){setTimeout(function(){q.pageLoaded(a)},5e3)});var b=function(){var a=[{rs:[]}];if(n(a[0].rs),a[0].rs.length>0){var b={data:a};q.sendSessionPayload(b)}},c=function(){this.watchCookieTimestamp()}.bind(r),e=function(){"visible"===document.visibilityState&&this.watchCookieTimestamp()}.bind(r);a.addEventListener?(a.addEventListener("click",c),document.addEventListener("visibilitychange",e),a.addEventListener("beforeunload",b)):a.attachEvent&&document.attachEvent("onclick",c)},this.pageLoaded=function(b){q.sendPerformance(!0,!0,b),q.heartBeat(),q.initalStaticPageLoadTimestamp="object"==typeof a.performance&&"function"==typeof a.performance.now?a.performance.now():0},this.endSession=function(){q.stopSession=!0,p.createCookie(q.cookieName,b.sessionId,-1)},this.heartBeat=function(){q.heartBeatInterval=setInterval(function(){var a=[{rs:[]}];if(n(a[0].rs,q.virtualPage),a[0].rs.length>0){var b={data:a};q.sendSessionPayload(b)}},3e4)},this.virtualPageLoaded=function(b){var c=null==this.virtualPage;"string"==typeof b&&(b.length>0&&"/"!==b[0]&&(b+="/"),b.length>800&&(b=b.substring(0,800)),this.virtualPage=b),c?this.sendPerformance(!0,!1,!1):this.sendPerformance(!1,!1,!1),"string"==typeof b&&(this.previousVirtualPageLoadTimestamp="object"==typeof a.performance&&"function"==typeof a.performance.now?a.performance.now():0)},this.sendPerformance=function(a,b,c){var d=o(this.virtualPage,a,b,c);if(d){var e={data:d};d[0].r?q.sendSPAPayload(e):d[0].rs.length>0&&q.sendSessionPayload(e)}},r.watchCookieTimestamp=e}}(window,window.atatus),function(a,b,c){c.__attachAjaxHooks=function(){var d=c._helper,e={queue:[],batchSize:25,processing:!1,bUnloaded:!1,push:function(a){"string"==typeof a.url&&(a.url.indexOf(".html")>0||-1===a.url.indexOf("://")||!c._isAllowedUrl(a.url)||(this.queue.push(a),this.queue.length>=this.batchSize&&this._processQueue()))},_processQueue:function(){if(!this.processing&&this.queue.length){this.processing=!0;try{for(var a={},b={},e=0;e0){f=g.method+g.url;var i=g.respAvailTime-g.sendTime,j=g.respProcTime-g.respAvailTime,k=g.receivedSize?+g.receivedSize:0,l=g.sendSize?+g.sendSize:0;0>i&&(i=0),0>j&&(j=0),isNaN(k)&&(k=0),isNaN(l)&&(l=0);var m=a[f];m?(m.st.push(h),m.rt.push(i),m.ct.push(j),m.rz.push(k),m.sz.push(l),m.ts.push(g.sendTime||(new Date).getTime())):a[f]={m:g.method,u:g.url,st:[h],rt:[i],ct:[j],rz:[k],sz:[l],ts:[g.sendTime||(new Date).getTime()]}}if(h>=400){f=g.method+h+g.url;var n=b[f];n&&n.sc?n.sc[h]?n.sc[h]++:n.sc[h]=1:(b[f]={m:g.method,u:g.url,sc:{}},b[f].sc[h]=1)}}var o={xhr:d.arrayFromObject(a),xhrError:d.arrayFromObject(b)};c.sendAjaxPerf(o)}catch(p){d.log("Error while processing queue: ",p)}finally{this.queue=[],this.processing=!1}}},beforeUnload:function(){e.bUnloaded||(e._processQueue(),e.bUnloaded=!0)}};d.addEventListener("beforeunload",e.beforeUnload,!1),setInterval(function(){e._processQueue()},3e4);var f={support:function(a){return!a||"apply"in a},around:function(a,b,c,e){return a=a||function(){},function(){var f,g=Array.prototype.slice.call(arguments);try{b&&(f=b.apply(this,g))}catch(h){d.log(e,h)}var i;try{i=a.apply(this,f||g)}finally{try{c&&c.apply(this,g)}catch(h){d.log(e,h)}}return i}},before:function(a,b){return f.around(a,b)},after:function(a,b){return f.around(a,null,b)},timeout:function(a){setTimeout(a,0)},wrapAddEventListener:function(){return function(a,b){if(("load"===a||"error"===a)&&b&&this._atrumXhrData){var c;b.__atrumInterceptor?c=b.__atrumInterceptor:f.support(b)?(c=h.wrapXHR(b,this,"XHR.invokeEventListener"),b.__atrumInterceptor=c):c=null;var d;return c&&(d=Array.prototype.slice.call(arguments),d[1]=c),d}}},wrapRemoveEventListener:function(){return function(a,b){if(this._atrumXhrData){var c=Array.prototype.slice.call(arguments);return b.__atrumInterceptor&&(c[1]=b.__atrumInterceptor),c}}},aroundWithHandleEvent:function(a,b,c,d){var e=a;return a&&"object"==typeof a&&"toString"in a&&"[xpconnect wrapped nsIDOMEventListener]"===a.toString()&&"handleEvent"in a&&(e=function(){a.handleEvent.apply(this,Array.prototype.slice.call(arguments))}),f.around(e,b,c,d)},getFullyQualifiedUrl:function(a){var c=b.createElement("a");return c.href=a,c.href}};if(a.XMLHttpRequest&&a.XMLHttpRequest.prototype){var g=a.XMLHttpRequest.prototype;if(!("open"in g&&"send"in g))return;if(!f.support(g.open)||!f.support(g.send))return;var h={};h.captureAjaxTimings=function(a){var b=a._atrumXhrData;if(b){var c=(new Date).getTime();2===a.readyState?b.firstByteTime=b.firstByteTime||c:4===a.readyState&&(b.respAvailTime=b.respAvailTime||c,b.firstByteTime=b.firstByteTime||c)}},h.sendPayload=function(a,b){b.receivedSize=0,a.responseType&&"text"!==a.responseType||"string"==typeof a.responseText&&(b.receivedSize=a.responseText.length),b.status=a.status,e.push(b)},h.wrapXHR=function(a,b,c){return f.aroundWithHandleEvent(a,function(){h.captureAjaxTimings(this)},function(){var a=b._atrumXhrData;if(a&&4===b.readyState){var c=(new Date).getTime();a.respProcTime=a.respProcTime||c,h.sendPayload(b,a),delete b._atrumXhrData}},c)},h.ajaxDone=function(a){if(a._atrumXhrData){var b=(new Date).getTime()+15e4,c=function(){h.captureAjaxTimings(a);var d=a._atrumXhrData;if(d){var e=(new Date).getTime();4===a.readyState?(d.respProcTime=d.respProcTime||e,h.sendPayload(a,d),delete a._atrumXhrData):b>e?setTimeout(c,50):delete a._atrumXhrData}};c()}},g.open=f.around(g.open,function(){var a=1<=arguments.length?String(arguments[0]):"",b=2<=arguments.length?String(arguments[1]):"";b=f.getFullyQualifiedUrl(b);var d=c._isAllowedUrl(b);d&&(b=b&&b.split("?")[0],this._atrumXhrData={method:a,url:b,sendTime:null,sendSize:null,firstByteTime:null,respAvailTime:null,respProcTime:null,receivedSize:null,parentPhase:null})},null,"XHR.open"),g.send=f.around(g.send,function(){var a=this,b=a._atrumXhrData;if(b){var c=(new Date).getTime();if(b.sendTime=b.sendTime||c,b.sendSize=1<=arguments.length&&arguments[0]?arguments[0].length||0:0,a.onreadystatechange&&"function"==typeof a.onreadystatechange){var d=0,e=function(){if(4===a.readyState)h.ajaxDone(a);else{var b=null;try{b=a.onreadystatechange}catch(c){return void h.ajaxDone(a)}d++,b?f.support(b)?a.onreadystatechange=h.wrapXHR(b,a,"XHR.onReadyStateChange"):h.ajaxDone(a):5>d?f.timeout(e):h.ajaxDone(a)}};e()}else a.addEventListener("readystatechange",function(){4===a.readyState&&h.ajaxDone(a)})}},null,"XHR.send"),"addEventListener"in g&&"removeEventListener"in g&&f.support(g.addEventListener)&&f.support(g.removeEventListener)&&(g.addEventListener=f.around(g.addEventListener,f.wrapAddEventListener(),null,"XHR.addEventListener"),g.removeEventListener=f.around(g.removeEventListener,f.wrapRemoveEventListener(),null,"XHR.removeEventListener"))}if("fetch"in a&&!a.fetch.polyfill){var i=a.fetch;a.fetch=function(a){return function(){for(var b=new Array(arguments.length),d=0;d=c)){var e={data:[{t:{n:a,s:d,t:{du:c}}}]};b.sendTxnPerf(e)}}function d(a){return i+" "+a}function e(){try{return"localStorage"in a&&null!==a.localStorage}catch(b){return!1}}function f(a){var b=j.now();try{localStorage.setItem(d(a),b)}catch(c){}}function g(a){var b=null,c=d(a);try{b=localStorage.getItem(c),localStorage.removeItem(c)}catch(e){}var f=0;return b&&(f=j.now()-b),f}function h(a){try{var b=d(a);localStorage.removeItem(b)}catch(c){}}var i="atatus.com/",j=b._helper,k=1,l=0;b.beginTransaction=function(a){e()&&f(a)},b.endTransaction=function(a){if(e()){var b=g(a);c(a,b,k)}},b.failTransaction=function(a){if(e()){var b=g(a);c(a,b,l)}},b.cancelTransaction=function(a){e()&&h(a)},b.recordTransaction=function(a,b,d){e()&&a&&b&&c(a,b,d===!1?l:k)}}(window,window.atatus),function(a,b){function c(a){a=a||{};var b=a.name&&a.name.toLowerCase();b&&a.value&&(e[b]||f++,e[b]=a.value)}function d(){if(a.webVitals){a.webVitals.onFID(c),a.webVitals.onFCP(c),a.webVitals.onTTFB(c),a.webVitals.onLCP(c),a.webVitals.onCLS(c,{reportAllChanges:!0}),a.webVitals.onINP(c,{reportAllChanges:!0});var b=a.performance&&a.performance.timing;!e.ttfb&&b&&(e.ttfb=b.responseStart-b.navigationStart,e.ttfb&&f++)}}var e={},f=0,g=!1,h=function(){!g&&f>0&&(g=!0,b.sendWebVitals(e))};"loading"!==document.readyState?d():document.addEventListener("DOMContentLoaded",function(){d()}),a.addEventListener("beforeunload",function(){h()})}(window,window.atatus),function(a,b){a._atatusConfig&&a._atatusConfig.apikey&&b.config(a._atatusConfig.apikey,a._atatusConfig).install()}(window,window.atatus))}(); -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "atatus-js", 3 | "version": "4.6.4", 4 | "description": "Atatus Real User Monitoring and Advanced error tracking plugin for web", 5 | "homepage": "https://www.atatus.com", 6 | "author": { 7 | "name": "Atatus", 8 | "email": "hello@atatus.com" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git@github.com:atatus/atatus-js.git" 13 | }, 14 | "main": "atatus.min.js", 15 | "keywords": [ 16 | "atatus", 17 | "rum", 18 | "error", 19 | "exception", 20 | "tracking" 21 | ], 22 | "license": "MIT", 23 | "ignore": {}, 24 | "dependencies": {}, 25 | "devDependencies": {} 26 | } 27 | -------------------------------------------------------------------------------- /component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "atatus-js", 3 | "version": "4.6.4", 4 | "main": "atatus.min.js" 5 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "atatus-js", 3 | "version": "4.6.4", 4 | "description": "Atatus Real User Monitoring and Advanced error tracking plugin for web", 5 | "url": "https://www.atatus.com", 6 | "homepage": "https://www.atatus.com", 7 | "author": { 8 | "name": "Atatus", 9 | "email": "hello@atatus.com" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git@github.com:atatus/atatus-js.git" 14 | }, 15 | "main": "atatus.min.js", 16 | "types": "./atatus.d.ts", 17 | "keywords": [ 18 | "atatus", 19 | "rum", 20 | "error", 21 | "exception", 22 | "tracking" 23 | ], 24 | "license": "MIT", 25 | "dependencies": {}, 26 | "devDependencies": {} 27 | } 28 | 29 | --------------------------------------------------------------------------------