import { onEvent, onError } from '../track'; export default function () { let oldOpen = XMLHttpRequest.prototype.open; let oldSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.open = open; XMLHttpRequest.prototype.send = send; function open(method, url, async, user, pass) { this._method = method; this._url = url; try { oldOpen.call(this, method, url, async, user, pass); } catch (ex) { onError({ data: ex.name + ": " + ex.message, occurredAt: new Date(), source: 'Opening ' + method + ' request to ' + url, stack: 'Unavailable', category: 'Unavailable' }); throw ex; } } function send(data) { let self = this; let start; let oldOnReadyStateChange; let url = this._url; let method = this._method; if (!this.noIntercept) { start = new Date().getMilliseconds(); if (this.addEventListener) { this.addEventListener("readystatechange", onReadyStateChange, false); } else { oldOnReadyStateChange = this.onreadystatechange; this.onreadystatechange = onReadyStateChange; } } function onReadyStateChange() { if (self.readyState == 4) { let time = new Date().getMilliseconds() - start; onEvent({ type: 'xmlHttpRequest', data: time + 'ms', occurredAt: new Date(), source: "[" + method + "] " + url, page: window.location.href + window.location.hash, HTML: "Not Available" }); } if (oldOnReadyStateChange) { oldOnReadyStateChange(); } } try { oldSend.call(this, data); } catch (ex) { onError({ data: ex.name + ": " + ex.message, occurredAt: new Date(), source: 'Sending ' + method + ' request to ' + url, stack: 'Unavailable', category: 'Unavailable' }); throw ex; } } }