From c5e60794edd01fe948bb2c4523ba28b6b4be7db9 Mon Sep 17 00:00:00 2001 From: Matt Byers Date: Mon, 25 Nov 2024 17:14:01 +1300 Subject: [PATCH 1/3] Update xhr response handler to also add request information to xhr status map. Update secondary timing data extraction to include more request/response info. New function to strip request/response data from payload after the on before send handler has fired. --- src/raygun.rum/index.js | 52 ++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/raygun.rum/index.js b/src/raygun.rum/index.js index 5e26d5af..d34ef382 100644 --- a/src/raygun.rum/index.js +++ b/src/raygun.rum/index.js @@ -733,10 +733,14 @@ var raygunRumFactory = function (window, $, Raygun) { var xhrStatusesForName = this.xhrStatusMap[url]; if (xhrStatusesForName && xhrStatusesForName.length > 0) { - var request = this.xhrStatusMap[url].shift(); + var xhrStatus = this.xhrStatusMap[url].shift(); - timingData.statusCode = request.status; - timingData.parentResource = request.parentResource; + timingData.statusCode = xhrStatus.response.status; + timingData.parentResource = xhrStatus.parentResource; + timingData.requestBody = xhrStatus.request.body; + timingData.requestUrl = xhrStatus.request.requestURL; + timingData.requestMethod = xhrStatus.request.method; + timingData.responseBody = xhrStatus.response.body; log('found status for timing', timingData.statusCode); if (this.xhrStatusMap[url].length === 0) { @@ -984,7 +988,8 @@ var raygunRumFactory = function (window, $, Raygun) { if (!!payload.eventData) { for (var i = 0; i < payload.eventData.length; i++) { if (!!payload.eventData[i].data && typeof payload.eventData[i].data !== 'string') { - payload.eventData[i].data = JSON.stringify(payload.eventData[i].data); + var strippedEventData = stripRequestAndResponseFromPayloadEventData(payload.eventData[i].data); + payload.eventData[i].data = JSON.stringify(strippedEventData); } } } @@ -1012,6 +1017,30 @@ var raygunRumFactory = function (window, $, Raygun) { }, (window.raygunUserAgentDataStatus === 1 ? 200 : 0)); } + function stripRequestAndResponseFromPayloadEventData(payloadEventData){ + for (var i = 0 ; i < payloadEventData.length; i++) { + var eventDataItem = payloadEventData[i]; + + if (eventDataItem.requestUrl) { + delete eventDataItem.requestUrl; + } + + if (eventDataItem.requestBody) { + delete eventDataItem.requestBody; + } + + if (eventDataItem.requestMethod) { + delete eventDataItem.requestMethod; + } + + if (eventDataItem.responseBody) { + delete eventDataItem.responseBody; + } + } + + return payloadEventData; + } + function updateUserAgentData(payload) { if (!payload.eventData) { return; } @@ -1174,7 +1203,9 @@ var raygunRumFactory = function (window, $, Raygun) { var requests = this.xhrRequestMap[response.baseUrl]; if (requests && requests.length > 0) { - var parentResource = requests[0].parentResource; + var request = requests[0]; + + var parentResource = request.parentResource; this.xhrRequestMap[response.baseUrl].shift(); @@ -1186,9 +1217,14 @@ var raygunRumFactory = function (window, $, Raygun) { this.xhrStatusMap[response.baseUrl] = []; } - log('adding response to xhr status map', response); - var responseWithParent = attachParentResource(response, parentResource); - this.xhrStatusMap[response.baseUrl].push(responseWithParent); + var requestAndResponse = { + request: request, + response: response + }; + + log('adding request/response to xhr status map', requestAndResponse); + var requestAndResponseWithParent = attachParentResource(requestAndResponse, parentResource); + this.xhrStatusMap[response.baseUrl].push(requestAndResponseWithParent); } else { log('response fired from non-handled request'); } From 305d910d20b169ee82460a6729cea8c0749075af Mon Sep 17 00:00:00 2001 From: Matt Byers Date: Tue, 26 Nov 2024 10:00:23 +1300 Subject: [PATCH 2/3] Update request details to be under a single key in the event data. --- src/raygun.rum/index.js | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/src/raygun.rum/index.js b/src/raygun.rum/index.js index d34ef382..33c33aff 100644 --- a/src/raygun.rum/index.js +++ b/src/raygun.rum/index.js @@ -737,10 +737,13 @@ var raygunRumFactory = function (window, $, Raygun) { timingData.statusCode = xhrStatus.response.status; timingData.parentResource = xhrStatus.parentResource; - timingData.requestBody = xhrStatus.request.body; - timingData.requestUrl = xhrStatus.request.requestURL; - timingData.requestMethod = xhrStatus.request.method; - timingData.responseBody = xhrStatus.response.body; + + timingData.requestDetails = { + url: xhrStatus.request.requestURL, + method: xhrStatus.request.method, + body: xhrStatus.request.body, + response: xhrStatus.response.body + }; log('found status for timing', timingData.statusCode); if (this.xhrStatusMap[url].length === 0) { @@ -988,7 +991,7 @@ var raygunRumFactory = function (window, $, Raygun) { if (!!payload.eventData) { for (var i = 0; i < payload.eventData.length; i++) { if (!!payload.eventData[i].data && typeof payload.eventData[i].data !== 'string') { - var strippedEventData = stripRequestAndResponseFromPayloadEventData(payload.eventData[i].data); + var strippedEventData = stripRequestDetailsFromPayloadEventData(payload.eventData[i].data); payload.eventData[i].data = JSON.stringify(strippedEventData); } } @@ -1017,24 +1020,12 @@ var raygunRumFactory = function (window, $, Raygun) { }, (window.raygunUserAgentDataStatus === 1 ? 200 : 0)); } - function stripRequestAndResponseFromPayloadEventData(payloadEventData){ + function stripRequestDetailsFromPayloadEventData(payloadEventData){ for (var i = 0 ; i < payloadEventData.length; i++) { var eventDataItem = payloadEventData[i]; - if (eventDataItem.requestUrl) { - delete eventDataItem.requestUrl; - } - - if (eventDataItem.requestBody) { - delete eventDataItem.requestBody; - } - - if (eventDataItem.requestMethod) { - delete eventDataItem.requestMethod; - } - - if (eventDataItem.responseBody) { - delete eventDataItem.responseBody; + if (eventDataItem.requestDetails) { + delete eventDataItem.requestDetails; } } From 4bb8e67bdf5430af128116435fb841a22605d2f5 Mon Sep 17 00:00:00 2001 From: Matt Byers Date: Tue, 26 Nov 2024 10:47:38 +1300 Subject: [PATCH 3/3] Rename response property to responseBody. Updated versions and changelog. --- CHANGELOG.md | 5 +++++ bower.json | 2 +- package.json | 2 +- raygun4js.nuspec | 2 +- src/raygun.rum/index.js | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db1bd9d2..068b2817 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --> +## [3.1.3] + +### Changed +- Updated RUM XHR events to include `requestDetails` for the `onBeforeSendRUM` handler. Request details include `url` (including query parameters), `method`, `body` and `responseBody`. These details are stripped from the payload before it's sent to Raygun's servers. + ## [3.1.2] ### Changed diff --git a/bower.json b/bower.json index d9cc173b..081ea1d0 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "raygun4js", - "version": "3.1.2", + "version": "3.1.3", "homepage": "http://raygun.com", "authors": [ "Mindscape " diff --git a/package.json b/package.json index 3b78eec4..92ce4751 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ ], "title": "Raygun4js", "description": "Raygun.com plugin for JavaScript", - "version": "3.1.2", + "version": "3.1.3", "homepage": "https://github.com/MindscapeHQ/raygun4js", "author": { "name": "MindscapeHQ", diff --git a/raygun4js.nuspec b/raygun4js.nuspec index c49945ac..f5903d05 100644 --- a/raygun4js.nuspec +++ b/raygun4js.nuspec @@ -2,7 +2,7 @@ raygun4js - 3.1.2 + 3.1.3 Raygun4js Raygun Limited Raygun Limited diff --git a/src/raygun.rum/index.js b/src/raygun.rum/index.js index 33c33aff..1248926f 100644 --- a/src/raygun.rum/index.js +++ b/src/raygun.rum/index.js @@ -742,7 +742,7 @@ var raygunRumFactory = function (window, $, Raygun) { url: xhrStatus.request.requestURL, method: xhrStatus.request.method, body: xhrStatus.request.body, - response: xhrStatus.response.body + responseBody: xhrStatus.response.body }; log('found status for timing', timingData.statusCode);